Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何制作无序地图<;字符串*,V>;是否按值而不是引用散列?_C++_C++14 - Fatal编程技术网

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 Use
std::unordered_map
。将来最好将代码粘贴在这里,而不是提供快照。
std::string
,除了作为字符串类之外,还是一个资源管理类。因此,不要通过将字符串对象本身作为要管理的资源来增加额外的开销。使用值语义,如Pete贝克尔说。把你的代码贴在这里,然后签出