[英]STL set find performance
如何覆盖类MyNode内的operator()以便set :: find可以使用,以及一个存储MyNode *的集合。 然后我尝试在set中找到指针,其数据字段与给定对象中的相同。 以下代码无法正常工作。 我在operator方法中设置断点,但没有停止。
我理解我可以在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(log N)?
至于第一个问题: std::set
不关心operator()()
; 它关心operator<()
。
至于你的第二个问题:与std::set<T>::find
方法不同, std::find
算法是O(n)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.