基本上我有,
typedef map<std::string, set<double> > MAP_STRING_TO_SET;
使用新值更新(添加或删除值)设置的最佳方法是什么,而不会导致设置被复制?
我看到唯一可行的解决方案是使用map<std::string, set<double>* >
- 我不想做的事情。
由于
答案 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"]
的内容。