如何插入向量以确保它保持排序?

时间:2014-08-27 09:09:31

标签: c++ algorithm c++11 vector binary-search

所以,我将数据存储在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()”在该位置插入一个元素。在startendmid之间,我应该能够了解这些信息,我只是不知道如何。

允许将多个键插入向量中只需if (data[mid] == key) data.emplace(mid, args...);

即可

那么,我如何找到正确的迭代器/索引来将一个元素插入到一个向量中,以便它保持排序?

0 个答案:

没有答案