我有以下代码:
wxString getColorName(const wxColour& color)
{
typedef ColorComboBox::ColorMap::right_const_iterator ConstColorIterator;
ColorComboBox::ColorMap colorMap = ColorComboBox::getDefaultChoices();
ConstColorIterator it = colorMap.right.find(color);
return it != colorMap.right.end() ? it->second :
ColorComboBox::CUSTOM_COLOR;
}
定义ColorMap的位置
typedef boost::bimaps::bimap \
<wxString, boost::bimaps::vector_of<wxColour> > \
ColorMap;
而且我一直收到一个较长的模板错误,该错误基本上表明find函数不存在。然而
ColorMap::left_const_iterator it = choices_.left.find(GetValue());
编译良好。
我有一个预感,仅在某些bimap集合类型中定义了find函数。我无法使用set_of wxColours,因为wxColour不具有可比性。 (那甚至意味着什么?)我还尝试将集合类型更改为list_of,但这也不起作用。使用bimap的全部目的是使我可以找到任一种方式的值。我使用了错误的容器吗? wxColour是否可以使用其他收集类型,使我可以使用find函数?
编辑:
我最终创建了自己的容器类。
最佳答案
Bimap允许您定义每侧的mapping type。如果您的应用程序需要执行快速搜索,请使用基于map / multimap或基于unordered_map / unordered_multimap的映射。请阅读文档,并记住每个 map View 均以等效的STL容器为模型,因此它们共享相同的约束和接口(interface):
set_of
(有序,唯一)-> std::map
multiset_of
(已订购)-> std::multimap
unordered_set_of
(散列,唯一)-> std::unordered_map
unordered_multiset_of
(已散列)-> std::unordered_multimap
list_of
(已排序)-> list_map(std::list<pair>
)vector_of
(随机访问)-> vector_map(std::vector<pair>
)unconstrained_set_of
->未映射我不明白您为什么选择
vector_of<wxColour>
,也许只是因为set_of<wxColour>
(默认值)未编译...在这种情况下,正如您所说的,您需要定义自己的比较运算符以告诉bimap如何排序这些项目。 vector 映射和列表映射可以使您创建保留 map 插入顺序的双图。在您的情况下,您想要的是
unordered_set_of
。您将需要为wxColour
定义自己的哈希函子。您可以使用Boost.Hash来实现它。最好的祝福