Back to questions
Junior — Middle
82
Какие условия необходимо выполнить, чтобы объект мог служить ключом в контейнере std::map?
Answer from AI
sobes.tech AI
Чтобы объект мог служить ключом в контейнере std::map, необходимо, чтобы для него была определена строгая упорядоченность. По умолчанию std::map использует оператор < для сравнения ключей. Значит, ваш тип должен поддерживать оператор < или вы должны предоставить собственный компаратор, реализующий строгий слабый порядок.
Основные условия:
- Ключ должен быть копируемым или перемещаемым.
- Для ключей должен быть определён оператор
<или компаратор, который задаёт строгий слабый порядок.
Пример с пользовательским типом и компаратором:
struct MyKey {
int id;
std::string name;
};
struct MyKeyCompare {
bool operator()(const MyKey& lhs, const MyKey& rhs) const {
if (lhs.id != rhs.id) return lhs.id < rhs.id;
return lhs.name < rhs.name;
}
};
std::map<MyKey, int, MyKeyCompare> myMap;
Если оператор < определён для типа, можно использовать std::map<MyKey, ValueType> без дополнительного компаратора.