如何比较 boost::variant 以便使其成为 std::map 的键?
如何比较 boost::variant 以便使其成为 std::map 的键? 似乎没有为 boost::variant 定义operator<()
How to compare boost::variant in order to make it a key of std::map ?
Seems that operator<() is not defined for boost::variant
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
已编辑以修复应用 BOOST::APPLY_VISITOR 时出现的错误
您可以为您的变体创建一个二进制访问者,然后使用 boost::apply_visitor 为您的地图创建一个比较器:
您可能需要重载
operator()
用于每个可能的类型对,而不是使用模板化的operator(const T &, const U &)
。然后你需要像这样声明你的地图:编辑:对于它的价值,
operator<()
是为boost::variant
定义的,但它定义为:我假设这不是你想要的。
EDITED TO FIX ERROR APPLYING BOOST::APPLY_VISITOR
You can create a binary visitor for your variant, and then use boost::apply_visitor to create a comparator for your map:
You'll probably need to overload
operator()
for each possible pair of types, as apposed to using the templatedoperator(const T &, const U &)
. Then you'd need to declare your map like this:Edit: for what it's worth,
operator<()
is defined forboost::variant
however it's defined as:which I'm assuming is not what you want.
也许您可以将比较器传递给地图。请参阅http://www.sgi.com/tech/stl/Map.html 有关如何编写比较器的示例。
Perhaps you can pass a comparator to the map. Please see http://www.sgi.com/tech/stl/Map.html for an example on how to write a comparator.