如何覆盖类MyNode中的operator()以便set :: find可以使用,以及一组存储MyNode *的设置。然后我尝试在set中找到指针,其数据字段与给定对象中的相同。下面的代码不能按我的预期工作。我在运算符方法中设置了断点,但没有停止。STL设置查找性能
我明白我可以在MyNode类之外定义find struct compare {},然后定义如下集合: set sets 这对我来说是oK。在这里我想知道是否可以在类MyNode中定义比较。
我的代码是这样的:
class MyNode {
std::string data;
public:
MyNode();
MyNode(std::string str);
MyNode(const MyNode& orig);
virtual ~MyNode();
std::string getData();
bool operator<(const MyNode& node){
return data<node.data;
}
bool operator<(const MyNode* node){
return data<node->data;
}
};
void testset(){
MyNode* node1 = new MyNode("5S");
MyNode* node2 = new MyNode("AH");
MyNode* node3 = new MyNode("AH");
std::cout<<" "<<node2<<std::endl;
std::set<MyNode*> sets;
sets.insert(node1);
sets.insert(node2);
std::set<MyNode*>::iterator iter =sets.find(node3); // I expected node2 can be found, but it does not..
if(iter != sets.end()){
MyNode* no = *iter;
std::cout<<"find it "<<no<<std::endl;
}
}
另一个问题是,如果我只定义设置,如:
set<MyNode> sets.
std::find(sets.begin(), sets.end(), findmethod("aa"))
这是复杂度为O(N)或O(日志N)?
搜索'std :: set'中的元素是O(log N)。 –
@MarcClaesen它是?该标准要求它对于设定的尺寸是对数的。使用*算法* std :: find而不是* container *'std :: set :: find'确实是线性的,这可能就是你的意思。不确定。 –
WhozCraig
@WhozCraig我的意思是'std :: set :: find'。我想我还不够具体。 –