std::map<any, string>
无效,所以我想知道是否还有另一种方法
有任意键?
答案 0 :(得分:5)
我认为问题不在于Boost::Any
,而在于您没有指定自定义比较器。由于map
是一个已排序的关联容器,因此您需要有一个比较器。
以下适用于我:根据您的目的定制:
#include <iostream>
#include <map>
#include <boost/any.hpp>
using namespace std;
struct cmp {
bool operator()(const boost::any& l, const boost::any& r) {
try
{
int left = boost::any_cast<int>(l);
int right = boost::any_cast<int>(r);
return left < right;
}
catch(const boost::bad_any_cast &)
{
return false;
}
return false;
}
};
int main() {
map<boost::any, string, cmp> ma;
boost::any to_append = 42;
ma.insert(std::make_pair(to_append, "int"));
if (ma.find(42) != ma.end()) {
cout << "hurray!\n";
}
return 0;
}
答案 1 :(得分:1)
您可能希望查看boost::variant
而不是boost::any
,因此您可以确定所使用的所有类型都具有可比性。
使用访问者是为variant
提供比较运算符的最佳方式。
答案 2 :(得分:-1)
使用if(any.type()== other.type())