【发布时间】:2016-04-19 09:03:30
【问题描述】:
我已经实现了一个测试用例,我可以将键作为自定义类,如下所示:
#include <iostream>
#include <map>
using namespace std;
class CoordinateValue
{
public:
short int x_;
short int y_;
CoordinateValue(short int x = 0, short int y = 0)
: x_(x),y_(y)
{
}
bool operator<=(const CoordinateValue &right) const
{
return ((this->x_ <= right.x_) && (this->y_ <= right.y_));
}
bool operator<(const CoordinateValue &right) const
{
return ((this->x_ < right.x_) && (this->y_ < right.y_));
}
bool operator>=(const CoordinateValue &right) const
{
return ((this->x_ >= right.x_) && (this->y_ >= right.y_));
}
bool operator>(const CoordinateValue &right) const
{
return ((this->x_ > right.x_) && (this->y_ > right.y_));
}
friend ostream &operator<<(ostream &out, const CoordinateValue &val)
{
out << "[ " << val.x_ << "," << val.y_ << " ]" << std::endl;
return out;
}
} ;
int main()
{
std::multimap<CoordinateValue,int,std::less_equal<CoordinateValue>> intersectionIn;
intersectionIn.insert(std::pair<CoordinateValue,int>(CoordinateValue(100,200),12));
intersectionIn.insert(std::pair<CoordinateValue,int>(CoordinateValue(1000,7),135));
intersectionIn.insert(std::pair<CoordinateValue,int>(CoordinateValue(0,2),112));
intersectionIn.insert(std::pair<CoordinateValue,int>(CoordinateValue(-10,-200),12));
intersectionIn.insert(std::pair<CoordinateValue,int>(CoordinateValue(-100,-200),12));
intersectionIn.insert(std::pair<CoordinateValue,int>(CoordinateValue(1000,2000),12));
std::multimap<CoordinateValue,int,std::greater<CoordinateValue>>::const_iterator iter = intersectionIn.begin();
while(iter != intersectionIn.end())
{
std::cout << iter->first;
++iter;
}
return 0;
}
现在我想根据某些条件调用 std::greater / std::less / std::less_equal 。我该如何委托?例如,对于一种情况,我用 std::less 声明容器,而对于另一种情况,我用 std::greater 声明容器。
如果有一些提示或参考会很棒。
谢谢
【问题讨论】:
-
关于编译时条件?还是运行时一?
-
我想在运行时使用它
-
您正在使用
std::map中的const_iterator和std::greater来迭代std::less,这是有意的吗? -
如果你只想在更大和更少之间切换,你可以使用反向迭代器。无法在运行时更改模板参数(比较)。
-
我很抱歉最后的评论。我想在编译时使用它。并且迭代器仅测试比较器 -less/greater 并且它是一个错误。它应该是 std::less_equal 。
标签: c++