开发者

Sort std::vector by an element inside?

I curren开发者_运维技巧tly have a std::vector which holds std::vector of double. I'd want to sort it by the second element of the double vectore. ex: instead of sorting by MyVec[0] or myvec[1] I wat it to sort myVec[0] and myvec[1] based on myvec[0][1] myvec[1][1]. Basically sort by a contained value, not the objects in it.

so if myvec[0][1] is less than myvec[1][1] then myvec[0] and myvec[1] will swap. Thanks


Just write the comparator:

bool my_comparator(const std::vector<double>& lhs, const std::vector<double>& rhs)
{
  assert(lhs.size() >= 2 && rhs.size() >= 2);
  return lhs[1] < rhs[1];
}
...
std::sort(big_vector.begin(), big_vector.end(), my_comparator);

It is better to write a functor instead of a function, but the concept is the same.


This is something like a vector of strings, except instead of a string of characters, we've got a string of numbers. I think you want this:

[
  [1, 0, 4],
  [4, 9, 9],
  [0, 1, 9],
  [4, 5. 2]
]

... to sort to ...

[
  [0, 1, 9],
  [1, 0, 4],
  [4, 5. 2],
  [4, 9, 9]
]

...right?

To do that, you'll need to write a comparator class or function that takes two vectors of numbers, and returns "true" if the first is less than the second. Like:

bool my_comparator(const std::vector<double> &a, const std::vector<double> &b)
{
    // return true if a < b ... by comparing a[0] with b[0], etc.
}

then pass that to sort():

sort(?, ?, my_comparator);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜