c++ 的lambda表达式,该如何解决

c++ 的lambda表达式
很奇怪的问题,数组短一点没有问题,数组长一点就出错退出,什么原因呢?
手头没有c++ 11的编译器,,,没法单步。。。
请教:
代码如下:
// Example program
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>


using namespace std;

string largestNumber(vector<int> & v)
{
    sort(v.begin(), v.end(), [](int a, int b) 
        {return to_string(a) + to_string(b) <= to_string(b) + to_string(a);});
        
    string ans;
    
    for(int i = v.size() - 1; i>=0; i--)
        ans += to_string(v[i]);
        
    return ans;
}


int main()
{
    vector<int> a;
    int len = 100;
    for(int i=0; i<len; i++)
        a.push_back(1);
    
    string n;
    n = largestNumber(a);
    
    cout<< "res:" << n << endl;
    
    return 0;
}


len=10就没问题,但是len=100就报错。

------解决思路----------------------
<= 改成 < 即可
void sort( RandomIt first, RandomIt last, Compare comp ) 要求当a < b 时才返回true,其他情况均应返回false
------解决思路----------------------
改成:


sort(v.begin(), v.end(), [](int a, int b) 
        {return to_string(a) + to_string(b) < to_string(b) + to_string(a);});

------解决思路----------------------
引用:
Quote: 引用:

sort 的比较式应该用小于。也可以用大于,这样后面就不用逆序遍历了。


不能写等于?
能解释下吗?没看懂后面的逆序遍历

c++ 要求喂给标准算法的比较运算能够保证 strict weak ordering,后者的条件之一就是不具有自反性,即 compare(x,x) 对任意值为假。主楼定义的 to_string(a) + to_string(b) <= to_string(b) + to_string(a); 没有这种性质,因为 to_string(x) + to_string(x) <= to_string(x) + to_string(x); 总为真。把这样的比较函数扔给 sort 会导致未定义行为,这就是为啥主楼的程序有的时候挂,有的时候看似能运行。

逆序遍历说的是后面的  for(int i = v.size() - 1; i>=0; i--) 循环,这是从向量尾部逆序向前遍历,说来说去你要从大到小遍历元素,那之前排序的时候直接降序排就行了。
------解决思路----------------------
strict weak ordering
------解决思路----------------------
不能写等于,他判断等于是通过a不小于b,同时b不小于a,你写成小于等于时,a与b相等的情况会出现a又小于b,b又小于a,去看侯捷的《泛型编程与STL》, 上面解释的很清楚