我需要按字典顺序对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。
答案 0 :(得分:7)
无需添加 function GroupCheck(user)
dim user, ADUser, objCom, objCon, objRS, membership
'^^^^
,这已经是比较矢量的方式。
根据您的确切用例,您正在寻找std::lower_bound
或std::upper_bound
,std::binary_search
或std::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;
}