【发布时间】:2010-10-08 08:28:20
【问题描述】:
目前我正在学习标准模板库 (STL)。
在这个程序中,我将一些长值存储在关联容器中,然后根据单元的位置对它们进行排序(根据单元位置的数字)。
代码:
#include <iostream>
#include <set>
#include <functional>
using namespace std;
class UnitLess
{
public:
bool operator()(long first, long second)
{
long fu = first % 10;
long su = second % 10;
return fu < su;
}
};
typedef set<long, UnitLess> Ctnr;
int main(void)
{
Ctnr store;
store.insert(3124);
store.insert(5236);
store.insert(2347);
store.insert(6415);
store.insert(4548);
store.insert(6415);
for(Ctnr::iterator i = store.begin(); i != store.end(); ++i)
{
cout << *i << endl;
}
}
但我不明白为什么我们的教授重载了 () 运算符?
谢谢。
【问题讨论】:
-
在该示例中似乎根本没有调用重载的
()运算符。也许它会在以后的练习中介绍? -
是的,当
std::set尝试按排序顺序插入元素时调用它(二进制谓词) -
@Greg Hewgill operator () 在执行 store.insert(some long value) 时被内部调用;
-
哦,现在我明白了。我很抱歉造成混乱。
-
@Greg Hewgill 你不需要道歉。毕竟你试图帮助我:)