簡體   English   中英

如何以無序順序(C ++)測試一項成員資格?

[英]How does one test item membership in an unordered sequence (C++)?

我已經使用python很長時間了,而我才剛剛開始使用C ++

在python中,如果有一個集合或一個字典,則使用in關鍵字相對容易地獲得一個布爾值,該布爾值指示特定項目是否在該序列

a = set(2,4,3)   
if 4 in a  
print "yes, 4 is in a, thank you for asking!"

比這樣做要有效得多:

a = [2,3,4]  
for number in a
>if number == 4  
>>return "yes, 4 is in a, thank you for asking!"

有沒有一種方法可以使cpp中的成員資格測試變得簡單而高效,還是您總是必須遍歷某些有序序列?

您在std :: set和tr1 :: unordered_set中具有類似的功能(在C ++標准中尚未提供)。

#include <set>
#include <cstdio>

int main() {
     std::set<int> s;
     s.insert(1);        
     s.insert(2);
     s.insert(4);
     if (s.find(4) != s.end())
          puts("4 found!");
     return 0;
}

實際上,如果您的數據集很小,則線性搜索可能仍然是更快的選擇。

了解C ++標准模板庫。 set類(和其他set )具有find()方法,該方法將向集合中的項目返回迭代器(如果存在)。

看一下STL提供的容器及其性能特征。

Python的方法並不是“效率更高”,因為您不知道in構造的復雜性。

在C ++中,有許多存儲數據的方法。 二叉樹最適合搜索。

如果使用2、3、4等數字,則可以考慮使用布爾數組,並簡單地看一下array[4] == true

template<typename T>
bool contains(const std::set<T>& a, const T& value) {
    return a.find(value) != a.end();
}

if (contains(a, 4)) {
    std::cout << "A contains 4\n";
}

std::find可以確定元素是否存在於任何無序容器或序列中。 如果序列是無序的,並且沒有存儲在專門用於查找的專用容器中,那么您做的任何事情都不會比O(N)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM