Что является лучшим способом использовать два ключа со станд.:: карта?

Другие ответы продемонстрировали способ, которым необходимо сделать это. Вот способ, которым Вы не были должны:

>>> def foo(counter=[0]):
...   counter[0] += 1
...   print("Counter is %i." % counter[0]);
... 
>>> foo()
Counter is 1.
>>> foo()
Counter is 2.
>>> 

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

43
задан user2548100 17 July 2013 в 16:52
поделиться

5 ответов

Используйте std :: pair для ключа:

std::map<std::pair<int,int>, int> myMap;

myMap[std::make_pair(10,20)] = 25;
std::cout << myMap[std::make_pair(10,20)] << std::endl;
115
ответ дан 26 November 2019 в 22:25
поделиться

I usually solve this kind of problem like this:

struct Point {
    int x;
    int y;
};

inline bool operator<(const Point& p1, const Point& p2) {
    if (p1.x != p2.x) {
        return p1.x < p2.x;
    } else {
        return p1.y < p2.y;
    }
}
32
ответ дан 26 November 2019 в 22:25
поделиться

Каковы требования к классу, который будет использоваться в качестве ключа?

Карта должна иметь возможность определять, меньше ли значение одного ключа, чем значение другого ключа: по умолчанию это означает, что (key1

В шаблоне карты также реализован перегруженный конструктор, который позволяет передавать ссылку на функциональный объект типа key_compare, который может реализовывать оператор сравнения: так что в качестве альтернативы сравнение может быть реализовано как метод этого внешнего функционального объекта, вместо того, чтобы быть привязанным к любому типу вашего ключа.

5
ответ дан 26 November 2019 в 22:25
поделиться

Boost имеет контейнер карты, который использует один или несколько индексов.

Multi Index Map

6
ответ дан 26 November 2019 в 22:25
поделиться

Используйте std :: pair. Лучше даже использовать QHash , int> , если у вас много таких сопоставлений.

0
ответ дан 26 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: