gpt4 book ai didi

c++ - 如何在具有非常量指针键的映射中通过常量指针键查找

转载 作者:行者123 更新时间:2023-12-01 13:09:15 25 4
gpt4 key购买 nike

以下 C++ 代码无法编译,因为它传递了一个指向 find() 的非常量指针。需要一个 const 指针的函数。

#include <map>

std::map<int*, double> mymap;

double myfind(const int * mykey)
{
return mymap.find(mykey)->second;
}

有没有办法在不改变 map 类型或创建变量的情况下进行查找工作 mykey非常量?
毕竟功能 find()不修改指向的对象,它只是比较指针。

最佳答案

映射中的键在语义上是不可变的,所有允许直接访问键的映射操作都是通过 const 实现的。 - 限定 key 类型(例如 value_type 被定义为 pair<const Key, T> )。

如果是 int*键类型但是你会得到一个 const指向非常量的指针 int ( int*const ),这不是很好(它仍然有效,因为只有指针值用作键,但不变性的语义被稀释,这可能导致错误)。

不要抛弃常量,只需更改 mapmap<const int*, double> .

然后它适用于 const int*以及 int*键。

#include <map>

std::map<const int*, double> mymap;

double myfind(const int * mykey)
{
return mymap.find(mykey)->second; // just works
}

double myfind(int * mykey)
{
return mymap.find(mykey)->second; // also works
}

关于c++ - 如何在具有非常量指针键的映射中通过常量指针键查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54588319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com