【发布时间】:2011-11-29 09:09:19
【问题描述】:
我试图在这里让我的问题变得简单。我有一个以 int 数组作为成员变量的结构。
struct elem
{
elem (int a, int b, int c) {id[0]=a; id[1]=b; id[2]=c;}
int id[3];
};
我想将 elem 指针放入 std::set 中,并且稍后我想使用 find() 从该集合中搜索特定对象,因此我想为此 std::set 提供自定义比较器。
struct compare
{
bool operator() (elem *one, elem *two )
{
// logic
}
};
int main(int argc, char* argv[])
{
std::set< elem *, compare> elemSet;
std::set< elem *, compare>::iterator itr;
elem ob1(2,5,9), ob2(5,9,7), ob3(4,3,7);
elemSet.insert(&ob1);
elemSet.insert(&ob2);
elemSet.insert(&ob3);
elem temp(4,3,7);
itr = elemSet.find(&temp);
if(itr != elemSet.end())
{
cout << endl << (*itr)->id[0] << " " << (*itr)->id[1] << " " << (*itr)->id[2];
}
return 0;
}
您能帮我了解比较器的逻辑吗?任何大小的数组都有通用逻辑吗?
【问题讨论】:
-
您需要什么样的帮助?只有你应该知道 operator less 应该为你的班级做什么
-
只要使用vector,它就有你需要的一切。
-
你想要比较的语义是什么?
-
@v01d - 我不能使用向量,因为元素的数量可以超过 200 万..
-
我认为如果你有足够的内存用于数组,使用向量是没有问题的。我可能是错的,只是不明白这个元素计数的数组将如何存在,而向量不会?
标签: c++ stl-algorithm