Yog*_*shi 0 c++ iterator multimap comparison-operators
bool operator<(const Binding& b1, const Binding& b2)
{
if(b1.r != b2.r && b1.t1 != b2.t1)
{
if(b1.r != b2.r)
return b1.r < b2.r;
return b1.t1 < b2.t1;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我有一个像上面这样的比较函数.基本上,如果其中一个属性匹配,我需要认为对象是相等的.我正在为我的multimap使用这个比较函数,其关键是'Binding'对象.我面临的问题是lower_bound和upper_bound函数返回指向有效对象的相同迭代器.例如(t1 = 1,r = 2)已经在地图中,当我尝试在地图中用(t1 = 1,r = 2)搜索它时,我获得与upper_bound和lower_bound函数的返回值相同的迭代器.
比较功能有什么问题吗?有没有办法计算一个函数,即使只有一个字段匹配,我仍然可以确保对象是等价的?upper_bound迭代器不应该返回通过的对象
期望地图或多图的比较器在该组键之间表达严格的弱排序关系.您的要求"如果只有一个字段匹配,则两个对象是等效的"不能是这样的关系.拿这三个键:
1: r=1, t1=10
2: r=1, t1=42
3: r=2, t1=42
Run Code Online (Sandbox Code Playgroud)
显然,键1和键2是等价的,因为它们具有相同的功能r.同样,2和3是相同的,因为它们是相同的t1.这意味着,1和3也必须是等价的,尽管它们没有匹配的字段.
作为必然结果,在这些情况下,所有可能的密钥都必须是等价的,这意味着您根本没有任何排序,并且多图不是正确的方法.
对于您的情况,我想到了Boost.MultiIndex.然后,您可以为r和t1执行两个单独的索引lower_bound,upper_bound并分别equal_range搜索两个索引.
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |