gpt4 book ai didi

c++ - std::set 填充了 boost::variant 元素不能按后代排序?

转载 作者:行者123 更新时间:2023-11-30 02:13:11 26 4
gpt4 key购买 nike

typedef boost::variant<long long,double,string> possibleTypes ;

set<possibleTypes,less<possibleTypes> > ascSet ;
set<possibleTypes,greater<possibleTypes> > descSet ;

当我尝试编译时,我在一些库头文件中遇到了一堆错误。
但是,如果我删除第三行(带有 descSet 的那一行),代码编译得很好。

有什么问题? boost::variant 对象不能按后代顺序排序吗??

编辑:
我正在使用 Visual Studio 2005 和 Boost 1.38.0 以及以下命令行:

cl /EHsc /I"C:\boost_1_38_0" test.cpp

编辑2正如 Doug T 所建议的那样,如果我这样定义:

bool operator>(const possibleTypes& a, const possibleTypes& b){
return b < a ;
}

然后下面的代码不能编译:

possibleTypes pt1="a", pt2="b" ;
greater<possibleTypes> func ;
cout << func(pt1,pt2) << endl ;

然而,这段代码编译得很好:

possibleTypes pt1="a", pt2="b" ;
cout << (pt1 > pt2) << endl ;

谁能帮我理解为什么?

我试过 VC++ 2005 和 GCC 3.4.6

最佳答案

似乎为 boost::variant 定义了一个 < 运算符,而不是 > 运算符。因此,也许 std::less<> 有效但 std::greater<>

参见 here

我会尝试定义一个免费的 > 运算符。

bool operator > (boost::variant<...> lhs, boost::variant<..> rhs)
{
return (rhs < lhs) // thanks Chris Jester Young
}

关于c++ - std::set 填充了 boost::variant 元素不能按后代排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com