【发布时间】:2019-01-15 18:27:22
【问题描述】:
有人可以帮我理解一下吗?
我创建了一个 char 字符串映射作为键和 int 作为二维 char 数组中的值。我看到地图中插入了重复的条目!
为了进一步测试,我在映射中添加了两个相同值的字符字符串(也在代码中,注释了),并且只添加了其中一个。
void countstr(char words[][NUM_OF_STR])
{
map<char*, int> mwords;
cout<<"ORIG"<<endl;
for(int i = 0; i < NUM_OF_STR; i ++)
{
cout<<words[i]<<endl;
mwords.insert(pair<char*, int>(words[i], 0));
cout<<mwords.size()<<endl;
}
map<char*, int>::iterator itr;
cout<<endl<<"MAP"<<endl;
for(auto i = mwords.begin(); i != mwords.end(); i ++)
{
cout<<i->first<<"\t"<<i->second<<endl;
}
return;
}
int main()
{
char words[NUM_OF_STR][5] = { "abc", "pqr", "xyz", "abc", "pqr" };
/*map<char*, int> mwords;
mwords.insert(pair<char*, int>("abc", 1));
cout<<mwords.size()<<endl;
mwords.insert(pair<char*, int>("abc", 2));
cout<<mwords.size()<<endl;*/
countstr(words);
return 0;
}
输出:
ORIG
abc
1
pqr
2
xyz
3
abc
4
pqr
5
MAP
abc 0
pqr 0
xyz 0
abc 0
pqr 0
【问题讨论】:
-
“允许重复的地图” - 那将是一个
std::multimap(或一个std::map持有一个带有损坏的operator<的类型 - 记住,你的 tyoes 需要为map实施严格的弱排序以做正确的事)。
标签: c++ dictionary