以下 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
),这不是很好(它仍然有效,因为只有指针值用作键,但不变性的语义被稀释,这可能导致错误)。
不要抛弃常量,只需更改 map
至 map<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/