Концепция строгого слабого упорядочения для типа ключа std :: map - PullRequest
1 голос
/ 26 мая 2020

Я бы хотел, чтобы этот шаблон класса требовал такой концепции, чтобы тип Key поддерживал строгое сравнение слабого порядка.

template <typename Key>
class Map {
    std::map<Key, int> map;
}

Есть ли элегантное решение?

1 Ответ

2 голосов
/ 26 мая 2020

Это зависит от того, хотите ли вы использовать < для примитива сравнения или хотите потребовать <=>.

Если первое:

template <typename Key>
    requires std::strict_weak_order<std::less<Key>, Key const&, Key const&>
class Map;

Если второе:

template <std::three_way_comparable<std::weak_ordering> Key>
class Map;

Оба они будут выполнять синтаксические c проверки во время компиляции, но также налагают семанти c проверку того, что рассматриваемый порядок является строгим слабым порядком (на самом деле я полагаю, что это технически отсутствует в weak_ordering формулировка, но она должна быть там ...)

...