std :: mapのキーにするためにboost :: variantを比較するには? boost :: variantに演算子<()が定義されていないようです。std :: mapのキーにするためにboost :: variantをどのように比較するのですか?
3
A
答えて
1
おそらく、コンパレータをマップに渡すことができます。コンパレータの書き込み方法の例については、http://www.sgi.com/tech/stl/Map.htmlを参照してください。
5
BOOSTを適用するエラーを修正するために編集:: APPLY_VISITOR
あなたのバリアントのバイナリ訪問者を作成し、ブーストを使用することができます::あなたのマップのコンパレータを作成するためのapply_visitor:
class variant_less_than
: public boost::static_visitor<bool>
{
public:
template <typename T, typename U>
bool operator()(const T & lhs, const U & rhs) const
{
// compare different types
}
template <typename T>
bool operator()(const T & lhs, const T & rhs) const
{
// compare types that are the same
}
};
おそらくテンプレートのoperator(const T &, const U &)
を使用してapposedにタイプの可能なペアごとにoperator()
をオーバーロードする必要があります。そして、あなたはこのようなあなたのマップを宣言する必要があるだろう:
class real_less_than
{
public:
template<typename T>
bool operator()(const T &lhs, const T &rhs)
{
return boost::apply_visitor(variant_less_than(), lhs, rhs);
}
};
std::map<boost::variant<T, U, V>, ValueType, real_less_than> myMap;
編集:それは次のように定義されていますが、それは価値がある何のために、operator<()
がboost::variant
のために定義されています
bool operator<(const variant &rhs) const
{
if(which() == rhs.which())
// compare contents
else
return which() < rhs.which();
}
私は仮定しているではありませんあなたが欲しいもの。
関連する問題
- 1. boost :: variantストアはどのように参照しますか?
- 2. 複数のデータ型で動作するようにstd :: mapを比較するには?
- 3. Boost Geometriesを比較するにはどうすればよいですか?
- 4. 文字列の比較。どのようにstd :: wstringと文字列を比較できますか? WRT strcmp
- 5. boost :: lambda std :: map
- 6. std :: mapをstd :: mapのキーとして使用する
- 7. DATEADD - どのように比較するのですか
- 8. boost :: variantを "2次元の方法"で使用して異種のstd :: mapを定義する方法
- 9. std :: vectorの内部にポインタを含むboost :: variantを設定する
- 10. std :: mapをstd :: stringキーとintキーで使用するコスト?
- 11. ハッシュテーブルの値またはキーを比較するにはどうすればよいですか?
- 12. boost :: bindをマップで使用すると、std :: pairとstd :: map :: value_typeのバインディングはどうなりますか?
- 13. boost ::任意の比較値ですか?
- 14. bashで80個のmd5sumをどのように比較するのですか
- 15. キーの参照に関するstd :: mapの動作
- 16. std :: mapのキーに適合するようにテンプレートパラメータを制約するにはどうすればよいですか?
- 17. データベースとのデータの比較はどのようにですか?
- 18. どのようにアンドロイドの時間の値を比較する
- 19. std :: mapをboost :: shared_ptrでコンパイルする際のエラー
- 20. どのように2つのデータテーブルを比較するのですか
- 21. 、どのように2つのcsvファイルを比較する?
- 22. IEをテストするためにWatinとセレンをどのように比較しますか?
- 23. 形の数を比較するために辺の数を比較するのに苦労します
- 24. UIPickerViewでどのように比較できますか?
- 25. std :: mapのstd :: reference_wrapperをキーとして使用する
- 26. 実行時にboost :: fusion :: vectorをどのように埋めるのですか?
- 27. C++ std :: mapで最大のキーを見つけるには?
- 28. WiXのレジストリバージョンを比較するにはどうすればよいですか?
- 29. どのように比較するボタンのタグによる配列のインデックス?
- 30. std map複合キー
ありがとうございます。 boost :: variant <>ではなく、boost :: make_recursive_variant <>で定義されているように、私のバリアントでoperator()が機能しませんでした。 通常のboost :: variant <> – user222202
@ user222202からコードをコピーします。私の編集。 mapのテンプレートリストでboost :: apply_visitorを呼び出すことはできません。ビジターを適用する関数オブジェクトを作成する必要があります。 –