我試圖遍歷一個向量(k),並檢查它是否包含一個值(鍵),如果是這樣,我想添加在不同向量(val)的相同索引處找到的值,然後添加無論在哪裏找到第三個向量(temp)。最有效的方法來搜索一個值並返回其向量中的索引?
for(int i = 0; i < k.size(); ++i)
{
if(k.at(i) == key)
{
temp.push_back(val.at(i));
}
}
我已經學到了很多最近,但我仍然不是超級先進的C++,這個代碼的工作,我的目的,但它是非常緩慢的。它可以處理尺寸爲10或100的小矢量,但對於尺寸大到1000,10000甚至1000000的尺寸需要太長的時間。
我的問題是,有沒有更快,更有效的方法來做到這一點?
我已經試過這樣:
std::vector<int>::iterator it = k.begin();
while ((iter = std::find(it, k.end(), key)) != k.end())
{
int index = std::distance(k.begin(), it);
temp.push_back(val.at(index));
}
我想也許使用矢量迭代器會加快速度,但我不能讓代碼工作,由於我是不知道如何bad_alloc的錯誤修理。
有沒有人知道我能做些什麼來使這個小小的代碼多更快?
您是否需要將數據保存在兩個單獨的向量中?這對於地圖或無序地圖來說似乎是一項完美的工作。 – krzaq
@krzaq不,我認爲我不知道,k和val向量在它們的索引處相等,並且它們也是相同的大小。有什麼方法可以將它們放在一起嗎?這會加速嗎? – Dante
你花時間查找和複製數據。通過查找時間,地圖可以提供很多幫助。 – krzaq