繁体   English   中英

STL设置查找性能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM