Вам нужно определить оператор меньше чем, чтобы включить сравнения для вашего типа узла:
struct Node
{
int a;
int b;
};
bool operator<(Node const& n1, Node const& n2)
{
// TODO: Specify condition as you need
return ... ;
}
Здесь вы можете проверить, что LessThan Comparable означает для пользовательского типа.
Альтернативное решение - определить функтор на основе std :: binary_function . С точки зрения дизайна, этот вариант имеет преимущества, потому что сравнение эффективно отделено от класса Node
. Это позволяет определять карты, специализированные с различными условиями сравнения (функторы).
#include <map>
struct Node
{
int a;
int b;
};
struct NodeLessThan
: public std::binary_function<Node, Node, bool>
{
bool operator() (Node const& n1, Node const& n2) const
{
// TODO: your condition
return n1.a < n2.a;
}
};
int main()
{
Node node;
node.a = 2;
node.b = 3;
typedef std::map<Node, int, NodeLessThan> node_map_t;
node_map_t bb;
bb[node] = 1;
}
Таким образом, вы можете определить больше сравнений, чем просто NodeLessThan
, например, используя другие условия или одно сравнение только с помощью Node::a
другого, сравнивающего оба компонента, Node::a
и Node::b
. Затем определены разные типы карт:
typedef std::map<Node, int, NodeLessThan> node_map_t;
typedef std::map<Node, int, NodeLessThanByA> node_map_a_t;
Такая развязка менее навязчива (вообще не затрагивает класс Node) и полезна для достижения более расширяемого решения.