dea*_*mer 14 c++ dictionary stl
我写了下面的代码,并对输出感到惊讶.我听说<map>
避免了密钥冲突,但这里似乎允许插入重复对.
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<string,char> namemap;
namemap["yogi"]='c';
namemap.insert(pair<string,char>("yogendra",'a'));
namemap.insert(pair<string,char>("yogendra",'b'));
cout<<namemap["yogendra"]<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码输出a
.您可以在C++ Shell上运行它.
避免碰撞是否意味着我们不能用相同的密钥输入多对?
NPE*_*NPE 45
第二个insert
具有相同的密钥是无操作.它只返回指向现有元素的迭代器.
std::map::insert()
有一个返回值,你应该检查.
它是类型std::pair<iterator,bool>
.该对的第二个元素告诉您元素是否已插入,或者是否已存在具有相同键的现有条目.
cout << namemap.insert(pair<string,char>("yogendra",'a')).second << endl;
cout << namemap.insert(pair<string,char>("yogendra",'b')).second << endl;
Run Code Online (Sandbox Code Playgroud)
小智 6
使用重复键插入值时,映射不会引发任何编译/运行时错误。但是在插入时,使用重复键不会插入新值,它只会返回相同的现有值。它不会覆盖。但在下面的情况下它将被覆盖。
map<char,int> m1;
m1.insert(pair <char, int> ('a', 40));
m1['a']=50;
cout << "a => " << m1.find('a')->second << '\n';
Run Code Online (Sandbox Code Playgroud)
结果将是 50。
下面的例子,它不会覆盖。
map<char,int> m1;
m1.insert(pair <char, int> ('a', 40));
m1.insert(pair <char, int> ('a', 50));
cout << "a => " << m1.find('a')->second << '\n';
Run Code Online (Sandbox Code Playgroud)
结果将为 40。
对于这两种情况,请记住此处的地图大小 1。
cout< "size = " << m1.size() << '\n';
Run Code Online (Sandbox Code Playgroud)
在这两种情况下它都是 1。
归档时间: |
|
查看次数: |
38552 次 |
最近记录: |