1. ホーム
  2. c++

[解決済み] 地図用のコンパレータを自作するにはどうしたらいいですか?

2022-12-10 08:20:15

質問

typedef map<string, string> myMap;

に新しいペアを挿入する場合 myMap に挿入する場合、キー string を使用して、独自の文字列コンパレータで比較します。このコンパレータをオーバーライドすることは可能でしょうか?たとえば、私は、キー string をアルファベットではなく長さで比較したいのですが。または、マップをソートする他の方法はありますか?

どのように解決するのですか?

std::map は最大4つのテンプレート型の引数を取り、3番目はコンパレータになります。例

struct cmpByStringLength {
    bool operator()(const std::string& a, const std::string& b) const {
        return a.length() < b.length();
    }
};

// ...
std::map<std::string, std::string, cmpByStringLength> myMap;

別の方法として、コンパレータを map のコンストラクタに渡すことができます。 .

ただし、長さで比較する場合は、マップ内の各長さの文字列をキーとして1つだけ持つことができることに注意してください。