LINUX.ORG.RU

std::map with std::pair key


0

0

Первый раз пишу на C++ не пинайте :)
Хочеться мне деревцо сделать с ключем в виде пары интов.
typedef std::pair<int, int> IE_key;
typedef std::pair<IE_key, ImageElement*> IE_pair;
class IE_comp
{
public:
bool operator () (const IE_key &x, const IE_key &y) const
{
return x.first < y.first || x.first == y.first && x.second < y.second;
}
};
typedef std::map<IE_key, ImageElement *, IE_comp(IE_key &, IE_key &)> IE_map;
typedef IE_map::iterator IE_it;
typedef std::pair<IE_it, bool> IE_ins;

Ругаеться компилятор, как-то я неправильно пытаюсь функцию сравнения задать, подскажите где я ошибся пожалуйста...

> Хочеться мне деревцо сделать с ключем в виде пары интов.

а мне хочется це с ключом

dilmah ★★★★★
()

Попробуй так

typedef std::map<IE_key, ImageElement *, IE_comp> IE_map;

Absurd ★★★
()

Надо так:

typedef std::pair<int, int> IE_key;
typedef std::pair<IE_key, ImageElement*> IE_pair;

bool operator < (const IE_key &x, const IE_key &y)
{
return x.first < y.first || x.first == y.first && x.second < y.second;
}

typedef std::map<IE_key, ImageElement *> IE_map;
typedef IE_map::iterator IE_it;
typedef std::pair<IE_it, bool> IE_ins;

Причем функция сравнения не должна принадлежать какому-либо классу.

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

Всё верно, 3й параметр map это и есть функция сравнения. По умолчанию там стоит Less, который вызывает operator < . Ошибка была в том, что неправильно указывали 3й параметр map'у. Это все таки тип, а не объект.

Reset ★★★★★
()
Ответ на: комментарий от Absurd

Всем большое спасибо, разобрался.

2 Absurd
Если вам несложно покажите пожалуйста как
можно сделать с помощью наследования.
Когда сам гуглил читал что так правильнее,
однако примера кода не нашел, и беглое чтение
Страуструпа ясности не внесло, но весьма интересно
как оно будет выглядеть.

Tima2008
() автор топика
Ответ на: комментарий от Tima2008

class IE_comp : public std::binary_function<IE_Key, IE_Key, bool>
 ... а дальше как у тебя

Begemoth ★★★★★
()

Молодец. Очень неплохой код для новичка. За то, что IE_Comp::operator () он const - бонус 5 к wisdom. Скотт Маэрс будет доволен.

the_coder ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.