我有以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
其中定义了ColorMap
typedef boost::bimaps::bimap \
<wxString, boost::bimaps::vector_of<wxColour> > \
ColorMap;
Run Code Online (Sandbox Code Playgroud)
我一直得到一个很长的模板错误,基本上说找不到查找功能.然而
ColorMap::left_const_iterator it = choices_.left.find(GetValue());
Run Code Online (Sandbox Code Playgroud)
编译好.
我有一个预感,find函数只在某些集合类型的bimap中定义.我不能使用set_of wxColours,因为wxColour无法比较.(这甚至意味着什么?)我也尝试将集合类型更改为list_of,但这也不起作用.我使用bimap的全部意义在于,无论哪种方式,我都能找到价值观.我使用了错误的容器吗?是否有另一种我可以用于wxColour的集合类型,它允许我使用find函数?
编辑: 我最终创建了自己的容器类.
小智 6
Bimap允许您定义每一侧的映射类型.如果您的应用程序需要执行快速搜索,请使用基于map/multimap或unordered_map/unordered_multimap的映射.请阅读文档并记住每个映射视图都是在等效的STL容器之后建模的,因此它们共享相同的约束和接口:
set_of (有序,独特) - > std::mapmultiset_of (订购) - > std::multimapunordered_set_of (哈希,独特) - > std::unordered_mapunordered_multiset_of (哈希) - > std::unordered_multimaplist_of(已排序) - > list_map(std::list<pair>)vector_of(随机访问) - > vector_map(std::vector<pair>)unconstrained_set_of - >未映射我不明白为什么你选择一个vector_of<wxColour>,也许只是因为set_of<wxColour>(默认)没有编译...在这种情况下,正如你所说,你需要定义自己的比较运算符告诉bimap如何订购这些项目.矢量映射和列表映射允许您创建保持关系的插入顺序的bimaps.
在你的情况下,你想要的是一个unordered_set_of.您需要为其定义自己的哈希函子wxColour.您可以使用Boost.Hash来实现它.
最好的祝福
| 归档时间: |
|
| 查看次数: |
2372 次 |
| 最近记录: |