C++ 快速进行词典编纂比较2个数字的方法

C++ 快速进行词典编纂比较2个数字的方法,c++,c++14,lexicographic,C++,C++14,Lexicographic,我试图按字典顺序对无符号int的向量进行排序 lexicographical_compare函数只支持迭代器,因此我不确定如何比较两个数字 这是我试图使用的代码: std::sort(myVector->begin(),myVector->end(), [](const unsigned int& x, const unsigned int& y){ std::vector<unsigned int> tmp1(x); st

我试图按字典顺序对无符号int的向量进行排序

lexicographical_compare函数只支持迭代器,因此我不确定如何比较两个数字

这是我试图使用的代码:

std::sort(myVector->begin(),myVector->end(), [](const unsigned int& x, const unsigned int& y){
        std::vector<unsigned int> tmp1(x);
        std::vector<unsigned int> tmp2(y);
        return lexicographical_compare(tmp1.begin(),tmp1.end(),tmp2.begin(),tmp2.end());
} );
std::sort(myVector->begin(),myVector->end(),[](常量unsigned int&x,常量unsigned int&y){
std::载体tmp1(x);
std::载体tmp2(y);
返回字典形式的比较(tmp1.begin(),tmp1.end(),tmp2.begin(),tmp2.end());
} );
C++11介绍

您可以使用from
to_string
,如下所示:

std::sort(myVector->begin(),myVector->end(), [](const unsigned int& x, const unsigned int& y){
        std::string tmp1 = std::to_string(x);
        std::string tmp2 = std::to_string(y);
        return lexicographical_compare(tmp1.begin(),tmp1.end(),tmp2.begin(),tmp2.end());
} );

我想你有一些很好的理由,但请允许我问一下:为什么你要用std::字典顺序对两个int进行排序?例如,在哪种情况下,0不小于1

我建议您比较想要使用std::less的标量。与std-lib本身相同

您的代码(来自问题)可能包含一个lambda,它将使用std::less,并且可以完美地工作。但让我们更进一步,提供一些可重用的代码,以便粘贴到您的代码中。以下是一个例子:

 /// sort a range in place
 template< typename T>
 inline void dbj_sort( T & range_ ) 
{
// the type of elements range contains
using ET = typename T::value_type;
// use of the std::less type
using LT = std::less<ET>;
// make its instance whose 'operator ()'
// we will use
LT less{};

std::sort(
    range_.begin(),
    range_.end(),
    [&]( const ET & a, const ET & b) {
        return less(a, b);
    });
}
///对区域进行适当排序
模板
内联void dbj_排序(T&range_)
{
//元素范围包含的类型
使用ET=typename T::value\u type;
//std::less类型的使用
使用LT=std::less;
//使其实例的“运算符()”为
//我们将使用
LT小于{};
排序(
范围\开始(),
range.end(),
[&](常数与a、常数与b){
回报率低于(a,b);
});
}
上面的代码在内部使用std::less。它将对包含begin()和end()以及它所包含的元素的公共类型的任何内容进行排序。换句话说,范围概念的实现

用法示例:

std::vector<int> iv_ = { 13, 42, 2 };
dbj_sort(iv_);

std::array<int,3> ia_ = { 13, 42, 2 };
dbj_sort(ia_);
std::vectorIV_uz={13,42,2};
dbj_排序(iv_);
std::数组ia_={13,42,2};
dbj_排序(ia_);
std::泛型正在运行

为什么std::less在这里工作?在其他显而易见的事情中,因为它比较了两个标量。字典编纂法比较两个序数

词典学_compare可以用于比较两个向量,而不是一个包含标量的向量中的两个元素


HTH

那么你想用十进制数字来比较数字吗?你能举一个例子,说明一个数字在字典上小于另一个数字,但在数字上大于或等于另一个数字吗?你确定你的代码有效吗?我还想知道你为什么要这样做。另外,你可以用&number和&number+1来伪造一个元素迭代器范围。我非常困惑。