searching keys in std::map using map::upper_bound

E

Erik Arner

Hi,

let's say I have a std::map<std::string,int> and I want to search the map
for all keys that start with "foo". The regexp equivalent is to search for
"foo*", or perhaps "^foo*".

At present I do this quick'n'dirty by appending a tilde (~) to the query
term, since I know it's last in the ascii table and my keys don't include
any special characters. So to find everything that starts with "foo" I
search the map from map::lower_bound("foo") to map::upper_bound("foo~").
See below for complete program that demonstrates this.

There must be a much smarter, cleaner, more portable and less ugly way to
do this. Any ideas?

Thanks,
Erik

Code:


#include <iostream>
#include <map>

using namespace std;

int main(int argc, char* argv[])
{

map<string, int> testmap;


testmap.insert( make_pair("fon", 1) );
testmap.insert( make_pair("foo", 2) );
testmap.insert( make_pair("foobar", 3) );
testmap.insert( make_pair("fool", 4) );
testmap.insert( make_pair("fop", 5) );

map<string, int>::iterator start_it = testmap.lower_bound("foo");
map<string, int>::iterator stop_it = testmap.upper_bound("foo~");

for( ; start_it != stop_it; ++start_it ) {
cerr<<(*start_it).first<<'\t'<<(*start_it).second<<endl;
}

return 0;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,777
Messages
2,569,604
Members
45,234
Latest member
SkyeWeems

Latest Threads

Top