寻找插入矢量的最佳位置

时间:2016-12-02 01:49:33

标签: c++ vector

例如,如果我有一个int的向量

 vector<int> my_vector;

 my_vector[0] = 6;
 my_vector[1] = 3;

所以我的矢量现在大小为2。

现在让我们说我想在我的向量中添加另一个整数。我们只是说这个新整数是10。

我希望能够设置3(my_vec.size()+ 1)方式。换句话说,检查将我的新值放在我的向量向量中的位置会产生我感兴趣的值。

10 ,6,3

6, 10 ,3

6,3, 10

在这3个选项中,我会选择最符合我需求的选项。我选择的那个,将是我的新载体。所以,如果我选择6,10,3,那将是我的矢量。

这是我想要做的事情的要点。

我有一种非常低效的蛮力方式来创建临时向量并以这种方式计算它。我想知道是否有一个简单而优化的方法来解决这个问题。我本质上希望能够在所有可能的区域中计算我想要添加到矢量中的新值,并寻找我感兴趣的任何值。

3 个答案:

答案 0 :(得分:1)

只需将新元素插入到最后(对于向量最有效的方式),然后逐步将其移到前面并测试每个组合:

 vec.push_back( new_value );
 test_vector( vec );
 for( size_t i = vec.size() - 1; i > 0; --i ) {
      std::swap( vec[i], vec[i-1] );
      test_vector( vec );
 }

ideone上的实例为6,3 + 10.新元素将始终在第一个位置结束。你需要找到最佳位置,然后将你的元素移动到那里,这应该是非常明显的。

答案 1 :(得分:0)

我想我理解你的问题。 您的计算方法很复杂。这只是一个例子。 你能选择一种安排吗? 您可以实现这样的功能:

int GetArrangemnetValue(vector<int>& sourceVec, int nNewPos, int nNewValue);

此功能可模拟整个矢量。 你可以做一些计算就是这个功能。 然后你可以通过函数的返回值做一些选择。

所以你可以使用这个函数而不是临时向量。

答案 2 :(得分:0)

这里你真的只有2个案例。第一种情况:新添加的数字小于向量中的第一个数字。在这种情况下,应始终将数字添加到向量的开头。如果新数字较大,它应该总是进入向量中的第二个点(因为向下移动向量不会影响新的总数)。