相关疑难解决方法(0)

使用boost或STL在C++中对压缩(锁定)容器进行排序

我想做什么:我想将2个,3个或N个向量锁定在一起,而不是将它们复制到元组中.也就是说,将冗长放在一边,例如:

vector<int>    v1 = {  1,   2,   3,   4,   5};
vector<double> v2 = { 11,  22,  33,  44,  55};
vector<long>   v3 = {111, 222, 333, 444, 555};

typedef tuple<int&,double&,long&> tup_t;
sort(zip(v1,v2,v3),[](tup_t t1, tup_t t2){ return t1.get<0>() > t2.get<0>(); });

for(auto& t : zip(v1,v2,v3))
  cout << t.get<0>() << " " << t.get<1>() << " " << t.get<2>() << endl;
Run Code Online (Sandbox Code Playgroud)

这应输出:

5 55 555
4 44 444
...
1 11 111
Run Code Online (Sandbox Code Playgroud)

我现在是怎么做的:我已经实现了自己的快速排序,我传递的第一个数组用于比较,排列应用于所有其他数组.我只是无法弄清楚如何重用std :: sort来解决我的问题(例如提取排列).

我试过的: boost :: zip_iterator …

c++ algorithm boost std c++11

44
推荐指数
3
解决办法
3482
查看次数

为什么迭代器需要是可默认构造的

前向,双向随机访问类别的迭代器需要是默认构造的.

为什么这样,为什么输入输出运算符不必是默认可构造的?

c++ iterator stl standard-library language-lawyer

33
推荐指数
1
解决办法
2013
查看次数

哨兵和结束迭代器有什么区别?

在阅读Eric Niebler的范围提议时,
我遇到了哨兵一词,作为最终迭代器的替代品.
我很难理解哨兵对末端迭代器的好处.
有人可以提供一个明确的例子,说明发送到表中的内容是不能用标准迭代器对完成的吗?

" 哨兵是过去的迭代器的抽象.哨兵是常规类型,可用于表示范围的结束.表示范围的哨兵和迭代器应为EqualityComparable.哨兵表示一个元素.迭代器我比较等于哨兵,我指向那个元素." - N4382

我认为哨兵在确定范围的结束时起着作用,而不仅仅是位置?

c++ iterator range sentinel c++17

12
推荐指数
2
解决办法
2271
查看次数