簡體   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