保持和使用指向地图内某些本地对象的指针可能是extemely危险。首先,当对象超出范围时,您可能会通过取消引用std::map
键来使应用程序崩溃。此外,它真的很难使用,并且在大多数情况下不是程序员的意图。你的情况:
auto it = mymap.find(&foo(2))
不会编译:
foo fc(2);
auto it = mymap.find(&fc);
将找不到容器内任意值(fa
具有相同的价值,但不同的指针)。它真的是你想要的吗?
这就是为什么我会建议重新定义您的std::map
到std::map<foo, double> mymap;
这将保持和比较foo
的价值。要使其工作,您需要执行foo::operator<()
或提供您自己的求解算法作为模板参数std::map
。第一种情况如下:
class foo {
int a, b, c;
double val;
public:
foo(int a) {}
bool operator<(const foo &other) const
{ return a < other.a && b < other.b && c < other.c; }
};
int main()
{
std::map<foo, double> mymap;
foo fa(2);
foo fb(4);
mymap[fa] = 1.0;
mymap[fb] = 2.0;
auto it = mymap.find(foo(2));
}
“我如何获得指针”应该是C++教科书或课程材料的一部分。 “为什么我需要一个指针”是一个完全不同的问题:-) –