c++ - 自定义排序元组 vector 时出错

标签 c++ sorting vector lambda

我尝试对元组 vector 进行排序,但我遇到了一个奇怪的错误:

typedef std::tuple<const std::string, const std::string, const unsigned int> nodesfound;

std::vector<nodesfound> nf;

fil_vector(nf);

std::sort(nf.begin(), nf.end(), [](nodesfound const &n1, nodesfound const &n2) {
        return std::get<2>(n1) < std::get<2>(n2);
    });

错误是:

/usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/tuple:299:17: error: no viable overloaded '='_M_head(*this) = std::forward<_Head>(_M_head(__in));

如果我删除排序行,我的程序就完全没问题了

最佳答案

要使 sort 起作用,元素必须是可分配的;然而,您的元组元素都是 const,因此显然 不可 分配。删除 const:

using nodesfound = std::tuple<std::string, std::string, unsigned>;

std::vector<nodesfound> nf;
fill_vector(nf);
std::sort(
    nf.begin(), nf.end(),
    [](nodesfound const& n1, nodesfound const& n2) {
        return std::get<2>(n1) < std::get<2>(n2);
    }
);

Online Demo

关于c++ - 自定义排序元组 vector 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38410034/

相关文章:

c++ - 构建 C++ 应用程序时 OSX 系统包含文件的默认路径是什么?

c++ - 将 Mat 转换为 **float

java - ConcurrentSkipListMap 是否对键修改进行排序? (以及其他自动排序结构)

java - 使用泛型列表进行快速排序时索引越界异常

c++ - 如何从充满 .txt 文件名的 vector 中选择随机元素 C++

c++ - 谁能告诉我如何编写一个简单的 C++ 代码来将我的数据(从变量)导出到 PDF 文件而不使用任何外部库或实用程序?

c++ - 传递许多函数并将它们的所有结果存储在一个元组中

java - 根据列表值对映射进行排序

c++ - Parent 类型的继承容器不能容纳 child ?

c++如何在结构 vector 的一个字段上创建迭代器