搜索按字典顺序排序的矢量<vector <int =“”>&gt;在c ++中

时间:2015-07-01 04:26:33

标签: c++ sorting c++11 vector stl

我需要按字典顺序对vector<vector<int> > vecOfVectors;进行排序。

所以,在按字典顺序排序之前,我的vecOfVectors是:

((0,100,17,2),(2,3,1,3),(9,92,81,8),(0,92,92,91),(10,83,7,2),(1,2,3,3))

为了做到这一点,我使用以下功能:

std::sort(vecOfVectors.begin(),vecOfVectors.end(),lexicographical_compare);

所以,我的vecOfVectors按字典顺序排序后现在是:

((0,92,92,91),(0,100,17,2),(1,2,3,3),(2,3,1,3),(9,92,81,8),(10,83,7,2))

现在给出一个向量,我需要在这个排序的vecOfVectors中搜索它的位置 - 像二进制搜索这样的东西会很好用。在c ++ stl中是否有一些可以用来执行二进制搜索的函数?

例如: (0,92,92,91)的位置为0; (0,100,17,2)的位置是1; (1,2,3,3)的位置是2; (2,3,1,3)的位置是3; (9,92,81,8)的位置是4; (10,83,7,2)的位置是5。

2 个答案:

答案 0 :(得分:7)

无需添加 function GroupCheck(user) dim user, ADUser, objCom, objCon, objRS, membership '^^^^ ,这已经是比较矢量的方式。

根据您的确切用例,您正在寻找std::lower_boundstd::upper_boundstd::binary_searchstd::equal_range - 所有这些操作都会对已排序的向量进行操作。

下面是您的数据和c ++ 11的完整示例。它构造你的向量,对它进行排序(显示你提到的顺序),然​​后在向量中找到一个值。

lexicographical_compare

答案 1 :(得分:0)

正如我在评论中所说,创建一个函数:

bool compare(vector<int> A,vector<int> B)
{
  int i=0;
  while(i<(A.size()<B.size())?A.size():B.size())
    {
      if(A[i]<B[i])
        {
          return 1;
        }
      else if(A[i]==B[i])
        {
         i++;
        }
      else
        {
          return 0;
        }
      }
 return 0;
}