使用包含set的map作为值

时间:2009-04-06 16:46:54

标签: c++ stl

基本上我有,

typedef  map<std::string, set<double> > MAP_STRING_TO_SET;

使用新值更新(添加或删除值)设置的最佳方法是什么,而不会导致设置被复制?

我看到唯一可行的解​​决方案是使用map<std::string, set<double>* > - 我不想做的事情。

由于

3 个答案:

答案 0 :(得分:13)

该集仅在初始化时复制。 您可以执行类似

的操作
myMap[myString].insert(myDouble);

因为map :: operator []返回一个引用。

答案 1 :(得分:0)

你也可以这样做:

map<std::string, set<double> >::iterator iter = myMap.find(myString);
if(iter != myMap.end())
{
 iter->second.insert(myDouble);
}

答案 2 :(得分:-1)

我认为你可以使用swap - 例如。

my_map["123"].swap(my_set)

提供版权问题my_set对您无关紧要。这会将my_map["123"]的先前内容与my_set交换,而且速度很快。

索引operator []返回对包含的set的引用 - 因此,您可以像处理任何其他变量一样操作它。如果要添加/删除单个值,可以使用insert()erase()方法 - 例如。 my_map["123"].insert(123)

当您为地图分配新集时,实际上会进行复制 - 例如

my_map["123"]=my_set

会创建my_set的副本。如果以后不需要使用my_set的值,则可以使用swap()方法,这只会改变两组指针。但是,my_set将包含之前my_map["123"]的内容。