Does a std::set ever rebalance ?
hi there,
I would like to know if the following piece of code is garantee to
work. I am afraid that the cstring address I am using in the std::map
found from a request in std::set is not garantee to remain the same as
the std::set grows...
thanks
-Mathieu
#include <set>
#include <map>
#include <iostream>
struct FileValuePair {
const char *filename;
const char *value;
};
static FileValuePair MAPPINGS[] = {
{ "foo1.dat" , "value1" },
{ "foo2.dat" , "value2" },
{ "foo3.dat" , "value1" },
{ "foo4.dat" , "value3" },
{ "foo5.dat" , "value2" },
{ "foo6.dat" , "value3" },
{ NULL , NULL },
};
int main()
{
FileValuePair *p = MAPPINGS;
std::set< std::string > values;
std::map< const char *, const char * > mappings;
while(p->filename)
{
values.insert( p->value );
// find back the address:
const char *v = values.find( p->value )->c_str();
mappings.insert(
std::map<const char*,const char*>::value_type(p->filename, v));
++p;
}
std::map<const char*,const char*>::const_iterator it =
mappings.begin();
for(; it != mappings.end(); ++it)
{
std::cout << it->first << " -> " << it->second << std::endl;
}
return 0;
}