2016-04-30 3 views
0

Следующий код дает ошибку "binary '<': оператор не найден, который принимает левый операнд типа« const point »(или нет приемлемого преобразования)». Как его исправить?Ошибка инициализации карты

#include <iostream> 
#include <map> 
using namespace std; 

struct point 
{ 
    float x; 
    float y; 
public: 
    void get() { 
     cin >> x >> y; 
    } 
}; 

int main() 
{ 
    map<point, point> m; 
    point p1, p2; 
    p1.get(); 
    p2.get(); 
    m.insert(make_pair(p1,p2)); 
} 

ответ

3

Вы должны определить < оператора для point, потому что std::map использует его для сравнения ключей по умолчанию.

#include <iostream> 
#include <map> 
using namespace std; 

struct point 
{ 
    float x; 
    float y; 
public: 
    // add this function 
    bool operator<(const point& p) const { 
     // example implementation 
     if (x < p.x) return true; 
     return x == p.x && y < p.y; 
    } 
    void get() { 
     cin >> x >> y; 
    } 
}; 

int main() 
{ 
    map<point, point> m; 
    point p1, p2; 
    p1.get(); 
    p2.get(); 
    m.insert(make_pair(p1,p2)); 
} 

Вы также можете указать компаратор в третьем параметре шаблона для std::map, но я думаю, что определение < оператора является более простым способом.

+0

Почему я получаю ту же ошибку, когда я использую m [p1] = m [p2] вместо m.insert (make_pair (p1, p2))? – user6275035

+0

@ user6275035 По той же причине: поскольку используемый оператор не определен. – MikeCAT

Смежные вопросы