保持和使用指向地圖內某些本地對象的指針可能是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++教科書或課程材料的一部分。 「爲什麼我需要一個指針」是一個完全不同的問題:-) –