C++ 如何制作无序地图<;字符串*,V>;是否按值而不是引用散列?
我有以下几点C++ 如何制作无序地图<;字符串*,V>;是否按值而不是引用散列?,c++,c++14,C++,C++14,我有以下几点 bar和bartest这两个等价字符串在无序映射中不映射到相同的值。我怎样才能做到这一点呢?当然它们不会映射到相同的值,const string*是一种指针类型,由于您调用了两次new string,最终会得到两个没有内存标识的独立对象(指针不相等) 更糟糕的是,你在程序结束时泄露了它们 什么(更糟糕的是),拥有原始指针和裸机新< /Cord>调用在现代C++中被认为是有害的。 P>幸运的是,它都是用无序的java映射< /> > -没有任何指针需要。 你的C++实际上是“ja
bar和bartest这两个等价字符串在无序映射中不映射到相同的值。我怎样才能做到这一点呢?当然它们不会映射到相同的值,
const string*
是一种指针类型,由于您调用了两次new string
,最终会得到两个没有内存标识的独立对象(指针不相等)
更糟糕的是,你在程序结束时泄露了它们
什么(更糟糕的是),拥有原始指针和裸机<代码>新< /Cord>调用在现代C++中被认为是有害的。 <> P>幸运的是,它都是用<代码>无序的java映射< /> > -没有任何指针需要。
你的C++实际上是“java+c”。< /P> 删除所有那些愚蠢的指针 您只需要无序映射
,并使用普通值而不是堆分配“new
s”
照办
#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;
}
#包括
#包括
#包括
int main()
{
无序的"我的地图",;
mymap[“bar”]=5;
mymap[“易货交易”]=10;
std::cout Usestd::unordered_map
。将来最好将代码粘贴在这里,而不是提供快照。std::string
,除了作为字符串类之外,还是一个资源管理类。因此,不要通过将字符串对象本身作为要管理的资源来增加额外的开销。使用值语义,如Pete贝克尔说。把你的代码贴在这里,然后签出