キーがペアで、カスタム コンパレータがそのペアの最初の要素に対して単一性を保証するマップがあるとします。
class comparator
{
public:
bool operator()(const std::pair<std::string, std::int>& left,
const std::pair<std::string, std::int>& right)
{
return left.first < right.first;
}
};
std::map<std::pair<std::string, std::int>, foo, comparator>;
可能であれば、このマップをそれよりもインテリジェントにしたいと考えています。
ペアの最初の要素と同じ文字列を持つキーが既に存在する場合に挿入時に拒否される代わりに、ペアの整数 (.second) が「おそらく挿入された要素」が大きくなります。
もちろん、キーのマップを調べてキーの詳細を取得し、必要に応じて上書きすることでこれを行うことができます。別の方法として、マルチマップを使用した挿入後のアプローチを採用することもできます。その上で、反復して重複をクリーンアップし、最大のペア整数を持つキーだけを保持します。
問題は、stl 実装 ([] 演算子 - 挿入メソッド) の一部をオーバーライドするか、カスタム コンパレータを改善してから、単にマップの挿入メソッドに依存することで、それをネイティブに実行できるかどうかです。
これが受け入れられるかどうかはわかりませんが、特定の状況下で既に保存されている (キー、値) ペアを更新できる非 const コンプレーターがあると想像できます。