所以,我将数据存储在std :: vector中,因为我需要连续存储我的数据。我希望能够对这些数据执行二进制搜索,但我不想一直调用std :: sort,因此自然要看的是如何将数据插入并删除到向量中。我该怎么做呢?
根据我的理解,找到合适的插入位置的最佳方法是使用二进制搜索。据我所知,二进制搜索:
T binarySearchRecursive(int key, int start, int end)
{
if (end < start)
//key does not exist in the vector
mid = (start + end) / 2;
if (data[mid] > key)
return binarySearchRecursive(key, start, mid-1);
else if (data[mid] < key
return binarySearchRecursive(key, mid+1, end);
else // if (data[mid] == key)
return data[mid];
}
我最感兴趣的是“if (end < start)
”部分,这意味着我试图插入的条目在向量中不存在。但是,我需要的是一种返回索引或迭代器的方法,它允许我“std::vector::insert()
”或“std::vector::emplace()
”在该位置插入一个元素。在start
,end
和mid
之间,我应该能够了解这些信息,我只是不知道如何。
允许将多个键插入向量中只需if (data[mid] == key) data.emplace(mid, args...);
那么,我如何找到正确的迭代器/索引来将一个元素插入到一个向量中,以便它保持排序?