gpt4 book ai didi

对的 C++ STL 列表运算符重载(根据第一个值排序,使用第二个值访问)

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:33 24 4
gpt4 key购买 nike

你好,我有一些关于 std::list 的重载操作符。

我将对存储在一个列表中,包含一个 int 值和一个位置数组:

  typedef std::pair< int, std::vector<int,3> > pointPairType;
typedef std::list< pointPairType > pointListQueueType;
pointListQueueType pointsQueue;
// adding some points to the list

我想根据对的第一个值对列表进行排序,我认为那行得通:

创建一个比较类,

并用它喂养短算法:

// comparison function
template < class T1, class T2 >
class compareFirst
{
public:
bool operator() (const std::pair<T1,T2>& l, const std::pair<T1,T2>& r)
{
return l.first < r.first;
}
};

... 主要是:

  // use of sorting algorithm : error here
pointsQueue.sort(< int, std::vector<int,3> >compareFirst);

但是我在'<'标记之前得到了一个“预期的主要表达式”

任何帮助将不胜感激!谢谢!

最佳答案

第一个问题是没有这个类型std::vector<int, 3> .假设您打算使用 3 元素数组,std::array<int, 3> (或 std::tr1::array 或 boost::array,取决于编译器)是您所需要的,或者只是 std::vector<int> .

其次,那些intstd::vector<int, 3>是模板参数,告诉编译器在许多可能的 compileFirst 之间进行选择。他们在他们应用的标识符之后,而不是在它之前。

以下在 GCC 4.5.2 和 MSVC 2010 上编译和运行:

#include <list>
#include <array>
typedef std::pair< int, std::array<int, 3> > pointPairType;
typedef std::list< pointPairType > pointListQueueType;
pointListQueueType pointsQueue;
template < class T1, class T2 >
struct compareFirst
{
bool operator() (const std::pair<T1,T2>& l, const std::pair<T1,T2>& r) const
{
return l.first < r.first;
}
};
int main()
{
pointsQueue.sort(compareFirst< int, std::array<int,3> >());
}

关于对的 C++ STL 列表运算符重载(根据第一个值排序,使用第二个值访问),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711097/

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