我看到很多将项添加到a map或unordered_mapvia 的示例operator[],如下所示:
int main() {
unordered_map <string, int> m;
m["foo"] = 42;
cout << m["foo"] << endl;
}
Run Code Online (Sandbox Code Playgroud)
是否有任何理由使用insert成员函数?看起来他们都做同样的事情.
Kir*_*rov 13
他们不是.
operator[]将覆盖此密钥的值(如果存在),而insert不会.
如果operator[]用于插入元素,预计会有点慢(请参阅下面@ MatthieuM的评论以获取详细信息),但这并不重要.
虽然std::map::insert回报std::pair< iterator, bool >,其中.second会告诉你,如果该值被插入或已存在.
关于你的评论:你不能拥有2个具有相同键和不同值的元素.这不是一个multimap.
如果地图中有一个元素,并且您尝试插入相同的键,则:
operator[] 将覆盖现有值 std::map::insert会std::pair< iterator, bool >,其中.second将是false(说"未插入新元素,因为这样的键已存在")并且.first将指向找到的元素.*由于来自@ luk32的注释/备注,我改变了这一点; 但通过写"不会做任何事",我并不是字面意思,我的意思是它不会改变现有元素的价值