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