2012-11-13 30 views
1

我有一組數字:在矢量檢查一組值

{2, 6, 8} 

我想檢查是否這些數字中的任何都在我的向量:

std::vector<int> myVector; 

我知道,我可以檢查每個單獨使用算法的std :: find:

auto iter1 = std::find(myVector.begin(), myVector.end(), 2); 
auto iter2 = std::find(myVector.begin(), myVector.end(), 6); 
auto iter3 = std::find(myVector.begin(), myVector.end(), 8); 

if(iter1 != myVector.end() || iter2 != myVector.end() || iter3 != myVector.end()) 
    std::cout << "A desired value was found in the vector!" 

在此例如,只有三個數字,但真正的數字集會更大。而且,這看起來很乏味。有更好的解決方案嗎?

+0

如果你有絕對沒有進一步的結構或關於你的數據的信息,然後不(複雜性)。您必須遍歷搜索空間和數據空間的整個交叉產品。當然,如果您找到結果,您可以儘早退出,但對於最糟糕的情況,想象一下隨機收集的數據不包含任何搜索項。 –

回答

4

您可以使用std::find_first_of

std::vector<int> myVector = /* something */; 
std::vector<int> values = {2, 6, 8}; 
auto first_found = std::find_first_of(std::begin(myVector), std::end(myVector), 
             std::begin(values), std::end(values)); 
if (first_found != std::end(myVector)) { 
    // Found one of them! 
} 
+0

蛋蛋。謝謝你,先生。 – user974967

0

如果你想檢查一些包含在「設置」,使用std::set

std::set<int> myset = {3,4,6,34,2,6,78,8,5,0}; 
if (myset.count(5) > 0) { 
    std::cout << "Hooray!" << std::endl; 
}