指数并插入电话之间的std ::地图差异(std::map difference between i

2019-08-21 18:40发布

是什么指数重载运算符和插入方法调用的std ::地图之间的区别?

即:

some_map["x"] = 500;

some_map.insert(pair<std::string, int>("x", 500));

Answer 1:

我相信插入()将不会覆盖现有的值,和运算的结果可通过在返回的迭代器/对值测试bool值被检查

分配给下标运算符[]刚刚覆盖任何的存在(如果没有一个存在已插入项)

无论是插入和[]运营商可能会导致问题,如果你不希望这种行为并没有适应它。

例如用插入:

std::map< int, std::string* > intMap;
std::string* s1 = new std::string;
std::string* s2 = new std::string;
intMap.insert( std::make_pair( 100, s1 ) ); // inserted
intMap.insert( std::make_pair( 100, s2 ) ); // fails, s2 not in map, could leak if not tidied up

并用[]操作:

std::map< int, std::string* > intMap;
std::string* s1 = new std::string;
std::string* s2 = new std::string;
intMap[ 100 ] = s1; // inserted
intMap[ 100 ] = s2; // inserted, s1 now dropped from map, could leak if not tidied up

我认为这些都是正确的,但并没有将它们编,所以可能有语法错误



Answer 2:

对于map ,前者( operator[]的表达将随时更换键-值对与新提供的值的值的部分。 如果不存在新的键值对将被插入。

与此相反, insert只会插入一个新的键值对,如果一个键值对与所提供的关键部分并不在地图上已经存在。



Answer 3:

除了这样的事实, map::operator[]将取代现有的值是operator[]图::将创建并添加到地图默认现有值发生替换之前更换(在map::operator[]()调用必须返回的东西的引用)。 对于那些创建昂贵的物品,这可能是一个性能问题。

请参阅“第24项:仔细选择与map::operator[]map::insert时,效率是很重要的”,在斯科特迈尔斯有效的STL 。



Answer 4:

该插入方法插入到地图,而过载索引操作符将返回元件与键key_value如果是在地图上,如果它尚未在地图那么它将插入。



文章来源: std::map difference between index and insert calls