这里是我的情况的说明。 我有一个std::map
和我想找到所述第一pair<key,value>
其中键是一个等价类键中的任何成员。
#include <map>
struct Category
{
int foo;
int bar;
bool operator < (const Category & rhs) const;
bool operator > (const Category & rhs) const;
};
struct Key
{
Category category;
float quality;
bool operator < (const Key & rhs) const
{
if (category < rhs.category)
return true;
else if (category > rhs.category)
return false;
else
return quality < rhs.quality;
}
};
struct Value {};
typedef std::map <Key, Value> Container;
Container::iterator find_low_quality
(
Container & container,
const Category & category
)
{
return container.lower_bound (category);
}
Container::iterator find_high_quality
(
Container & container,
const Category & category
)
{
// some checks need to be done, here omitted for brevity
return --container.upper_bound (category);
}
这不起作用,因为map::lower_bound
和map::upper_bound
只需要key_type
(即Key
)的说法。 我无法得到std::lower_bound
编译,我看到它需要一个LegacyForwardIterator
,但我有一个很难解释这个规范。
只要该Key
为地图是有序的,在Key
有一个兼容的排序Category
,即: k<c
当且仅当k.category<c
所以我的要求似乎逻辑意义。
在实际情况中, Key
类的,更复杂,分离质量/组件类(以使用map<category,map<quality,value>>
解决方案)是不是真的去工作,如果那是什么你在想的。
我如何才能找到我的地图,它的键等同于一些非关键价值元素的范围的下限(和上)边界?