如何使unordered_map <string *,v =“”>按值而不是引用进行哈希?

时间:2017-05-30 05:17:23

标签: c++ c++14

我有以下

C++ code with unordered_map

两个等效的字符串bar和bartest不会映射到unordered_map中的相同值。我怎样才能做到这一点?

2 个答案:

答案 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;
}