小编Jon*_* B.的帖子

排序向量<variant <... >>无法通过operator <正常工作

我想通过其成员返回值对两个自定义类对std :: variant类型的std :: vector进行排序.见下面的代码.

现在,使用

std::sort(std::begin(shapes), std::end(shapes), [](auto const& a, auto const& b){
        return std::visit([](auto const& s) { return s.area(); }, a)
            < std::visit([](auto const& s) { return s.area(); }, b);
        });
Run Code Online (Sandbox Code Playgroud)

似乎确实有用,但它非常难看.由于std :: variants operator <对它们各自的值进行操作,我认为提供模板化比较运算符看起来会更好.但为什么它不起作用?

码:

#include <algorithm>
#include <iostream>
#include <variant>
#include <vector>

constexpr double pi = 3.141592865;

struct Square {
    double d{};
    double area() const { return d * d; }
};

struct Circle {
    double r{};
    double area() const { return pi * r …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++17

2
推荐指数
1
解决办法
108
查看次数

标签 统计

c++ ×1

c++17 ×1

stl ×1