2015-05-20 24 views
-3

我想對對的向量執行二進制排序,也返回一次找到的迭代器,但我似乎有這個問題。最初我有這樣的事情,t是一個int類型的向量。Binary_Search向量的部分

if (std::binary_search(t.begin(), t.end(), 5, *it)) 
{ 
    if (it != t.end()) 
    { 
     cout << "FOund"; 
    } 
} 

然而,這似乎並沒有工作(編制問題)我認爲這個問題是因爲我有一對,而不是一個正常的載體,所以不知道是否有人對此有任何網站鏈接我可以讀?# #

收到的錯誤是下面:

術語不計算爲服用2個參數

+0

*「然而,這似乎並沒有工作」*爲什麼不呢?它不會編譯?它會產生不正確的結果嗎? – CoryKramer

+0

我編輯了我的問題@CoryKramer – CodersSC

+0

@ShamariCampbell您能否發佈您的錯誤消息? – Eenoku

回答

0

標準算法的std :: binary_search有以下幾種形式

template<class ForwardIterator, class T> 
bool binary_search(ForwardIterator first, 
        ForwardIterator last, 
        const T& value); 

template<class ForwardIterator, class T, class Compare> 
bool binary_search(ForwardIterator first, 
        ForwardIterator last, 
        const T& value, 
        Compare comp); 

因此,你在發言的算法的通話

if (std::binary_search(t.begin(), t.end(), 5, *it)) 

和隨後的檢查

if (it != t.end()) 

沒有意義。此外,如果矢量的值類型爲std::pair,則必須指定std::pair類型的對象作爲第三個參數。您可以使用std::lower_boundstd::equal_range

0

功能什麼是你真正想要ŧ做什麼?你想如何尋找一個整數在的數組?您只能在對的向量內找到給定的

如果你想找到一個給定的整數作爲它的第一個或第二個參數,你必須自己寫一些代碼。

找到給定,繼續閱讀。

std::binary_search無法返回迭代器,也不會接受迭代器作爲第4個參數。作爲第四個參數,它接受一個比較器,但絕對不是比較器。

如果你想獲得一個迭代器,你應該使用std::lower_boundstd::upper_bound分配返回值itit = std::lower_bound(t.begin(), t.end(), val)