2013-03-03 4 views
0

Как искать определенный элемент и считать его в std :: vector? Он ДОЛЖЕН быть быстрым. Пожалуйста, помогите, спасибо.C++ Что было бы самым быстрым способом поиска и подсчета для определенного элемента в std :: vector?

Это то, что я до сих пор:

// Lets assume the Database is sorted (which it will be) 
std::vector<std::string> Database(3); 
Database.push_back("Password123"); 
Database.push_back("HelloWorld!!!"); 
Database.push_back("HelloWorld!!!"); 
//... 

std::string Password = "HelloWorld!!!"; 

// Search and count Password? 
// Should return true and 2 

Ох, и я слышал, индексация происходит медленнее, чем итератора. Это правда?

+0

Вы не можете выиграть линейное время, если ваш вектор не отсортирован. – Pubby

+0

Ну, вы не можете подсчитать конкретные элементы, не проверяя хотя бы один элемент по крайней мере. Таким образом, сложностью наиболее эффективного решения будет O (n). – LihO

+0

Хорошо, скажем, он был отсортирован. Как мы делаем это? :) – user2117427

ответ

5

std::count?

int num = std::count(Data.begin(), Data.end(), target); 

Но если это «должно быть быстрыми», то вам следует рассмотреть вопрос о сортировке вашего вектора, прежде чем запрашивая его, потому что тогда вы можете использовать более быстрые подходы к подсчету (например std::lower_bound и std::upper_bound).

+0

Надеюсь, это быстро. Благодарю. Также, как мы ищем цель? – user2117427

+0

Что это значит? цель - это то, что вы хотите подсчитать. –

+0

О, я спотыкаюсь. Благодарю. – user2117427