我有以下
两个等效的字符串bar和bartest不会映射到unordered_map中的相同值。我怎样才能做到这一点?
答案 0 :(得分:2)
当然它们没有映射到相同的值,const string*
是一个指针类型,因为你两次调用new string
,你最终会得到两个没有内存标识的独立对象(指针不相等)。
更糟糕的是,你在程序结束时泄漏了它们。
有什么(可以说)更糟糕的是,拥有原始指针和裸new
次调用在现代c ++中被认为是有害的。
幸运的是,所有这些都是用unordered_map<string, int>
修复的 - 无论如何都不需要指针。
答案 1 :(得分:0)
你的C ++实际上是#34; Java-- + C&#34;。
删除所有那些愚蠢的指针。
您只需要unordered_map<string,int>
并使用普通值而不是堆分配&#34; new
s&#34;
只是做
#include <unordered_map>
#inclide <string>
#include <iostream>
int main()
{
unordered_map<string,int> mymap;
mymap["bar"] = 5;
mymap["bartest"] = 10;
std::cout << mymap["bar"] << ' ' << mymap["bartest"] << '\n';
return 0;
}