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. std :: variantで可能なように、boost :: variantのインデックスでアイテムを取得する
- 2. boost :: variantストアはどのように参照しますか?
- 3. boost :: variantと含まれる値の比較
- 4. std :: mapにboost :: unique_ptrを挿入する
- 5. std :: variantをスーパータイプの別のstd :: variantに変換する
- 6. Boost Geometriesを比較するにはどうすればよいですか?
- 7. スレッドを比較するために、どのよう
- 8. 複数のデータ型で動作するようにstd :: mapを比較するには?
- 9. boost :: variantにクラスを保存する
- 10. boost :: visitorにunique_ptrのboost :: variantを使用する
- 11. 文字列の比較。どのようにstd :: wstringと文字列を比較できますか? WRT strcmp
- 12. boost :: lambda std :: map
- 13. boost :: variant - メンバーのベクトルプロパティを取得する
- 14. DATEADD - どのように比較するのですか
- 15. boost :: variantを "2次元の方法"で使用して異種のstd :: mapを定義する方法
- 16. 比較関数を使わないでstd :: mapがキーの値をキーとしてマップする方法
- 17. std :: vectorの内部にポインタを含むboost :: variantを設定する
- 18. std :: mapをstd :: mapのキーとして使用する
- 19. キーの型および/またはタイプboost :: anyの値のstd :: mapの型チェック?
- 20. スピードのために私のExcel VBAコードの比較ループをどのようにリファクタリングするのですか?
- 21. boost :: bindをマップで使用すると、std :: pairとstd :: map :: value_typeのバインディングはどうなりますか?
- 22. 私はどのようにboost :: range :: sort()boost :: transformed_rangeですか?
- 23. ハッシュテーブルの値またはキーを比較するにはどうすればよいですか?
- 24. boost ::任意の比較値ですか?
- 25. std :: mapをstd :: stringキーとintキーで使用するコスト?
- 26. 同じクラスのオブジェクトを比較するために '<'演算子をどのようにオーバーロードしますか?
- 27. bashで80個のmd5sumをどのように比較するのですか
- 28. 2つのオブジェクトをフィールドでどのように比較するのですか?
- 29. std :: mapをboost :: shared_ptrでコンパイルする際のエラー
- 30. データベースとのデータの比較はどのようにですか?
ありがとうございます。 boost :: variant <>ではなく、boost :: make_recursive_variant <>で定義されているように、私のバリアントでoperator()が機能しませんでした。 通常のboost :: variant <> – user222202
@ user222202からコードをコピーします。私の編集。 mapのテンプレートリストでboost :: apply_visitorを呼び出すことはできません。ビジターを適用する関数オブジェクトを作成する必要があります。 –