[英]STL map with custom class comparator not working
我有一張地圖,其中有一個類作為鍵。
在此類中,我重載了<
運算符,在這里我讀到地圖將自動使用它進行比較和排序。
編譯時出現以下錯誤:
錯誤1錯誤C2664:'std :: pair :: pair(const std :: pair&)':無法將參數1從'Position'轉換為'Position * const&'e:\\ program files \\ Visual Studio 2013 Ultimate \\ vc \\包括\\ xmemory0
我沒有真正的含義或如何避免它。 它也沒有突出顯示我的代碼中的任何內容。
這是我的代碼,我的類是坐標,我希望它們從左到右,從上到下進行排序,但是這里的邏輯不是問題。
位置文件中顯然還有更多內容,但是我認為這些是相關的部分。
main.cpp中
int main()
{
std::map<Position*, int> karte;
Position p1;
p1.setX(0);
p1.setY(0);
Position p2;
p2.setX(0);
p2.setY(1);
Position p3;
p3.setX(1);
p3.setY(0);
Position p4;
p4.setX(1);
p4.setY(1);
karte.emplace(p1, 1);
karte.emplace(p2, 2);
karte.emplace(p3, 3);
karte.emplace(p4, 4);
for (auto& x : karte)
{
std::cout << x.first->toString() << ": " << x.second << std::endl;
}
return 0;
}
Position.h
bool operator<(const Position&) const;
Position.cpp
bool Position::operator<(const Position &position) const
{
if ((x_ < position.x_) && (y_ == position.y_))
{
return true;
}
if (x_ > position.x_ && y_ < position.y_)
{
return true;
}
if (x_ == position.x_ && y_ < position.y_)
{
return true;
}
else
{
return false;
}
}
將地圖重新定義為:
std::map<Position, int> karte;
編譯錯誤是因為您試圖在地圖中插入pair<Position, int>
:
Position p1;
<snip>
karte.emplace(p1, 1);
並且您已將地圖聲明為map<Position*, int>
如果您需要地圖的鍵作為指針,則可以創建自己的比較器並將其傳遞給地圖:
struct PositionPointerLesser
{
bool operator() (Position *lhs, Position *rhs) const
{
return *lhs < *rhs; // This calls the operator < in your class
}
};
int main()
{
std::map<Position*, int, PositionPointerLesser> karte;
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.