gpt4 book ai didi

c++ - 使用用户定义的比较类对 std::pair 的 std::vector 进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 16:04:33 24 4
gpt4 key购买 nike

我有两个类模板 MyClassA<T>MyClassB<T> .

根据这些,我构建了两个 std::vector作为 std::vector<MyClassA<double>> Astd::vector<MyClassB<double>> B .

我的目标是首先对 A 进行排序按升序排列(实际上我会进行范围/部分排序)。

然后使用该顺序对 B 进行排序.

目前我正在做的是:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <random>

// my class definitions
template<typename T>
class MyClassA
{
public:
T valA;
};

template<typename T>
class MyClassB
{
public:
T valB;
};

// my compare class
template<typename T>
using TIter = typename std::vector<T>::const_iterator;

template <typename T>
class MyCompare
{
public:
bool operator()(std::pair<std::size_t, TIter<MyClassA<T>>>
const& a, std::pair<std::size_t, TIter<MyClassA<T>>> const& b)
{
return *(a.second).valA < *(b.second).valA;
}
};

// sort from given order
//... not yet implemented

int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(0, 1);

// first ClassA Object vector A
std::vector<MyClassA<double>> A(5);
for(auto& i:A) i.valA = dis(gen);
// second ClassB Object vector B
std::vector<MyClassB<double>> B(5);
for(auto& i:B) i.valB = dis(gen);

// sort vector A elements' references in ascending order
std::size_t i = 0;
std::vector<std::pair<std::size_t, TIter<MyClassA<double>>>> torder(A.size());
for(auto it = A.begin(); it != A.end(); ++it, ++i) torder[i] = std::make_pair(i, it);
std::sort(torder.begin(), torder.end(), MyCompare<double>()); // getting error here

// sort vectors A and B elements using the above sorted order
// ...
return 0;
}

但是,我收到以下错误:

error: 'const class __gnu_cxx::__normal_iterator<const MyClassA<double>*, std::vector<MyClassA<double> > >' has no member named 'valA'

最佳答案

这是 operator precedence 问题的一个简单案例.成员选择点 . 的优先级高于取消引用运算符,例如*(a.second).valA 被解析为 *((a.second).valA)

只需更改为例如a.second->valA(或 (*a.second).valA)。

关于c++ - 使用用户定义的比较类对 std::pair 的 std::vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37934330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com