Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;成对的STL列表运算符重载(根据第一个值排序,使用第二个值访问)_C++_Templates_List_Std - Fatal编程技术网

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

C++ C++;成对的STL列表运算符重载(根据第一个值排序,使用第二个值访问),c++,templates,list,std,C++,Templates,List,Std,您好,我有一些std::list重载运算符 我将对存储在一个列表中,由一个int值和一个位置数组组成: typedef std::pair< int, std::vector<int,3> > pointPairType; typedef std::list< pointPairType > pointListQueueType; pointListQueueType pointsQueue; // adding some points to

您好,我有一些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
typedef std::pairpointPairType;
typedef std::listpointListQueueType;
pointListQueueType点队列;
//向列表中添加一些点
我想根据对的第一个值对列表进行排序, 我认为这会奏效:

创建一个比较类

并将其输入短算法:

// 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;
    }
};
//比较函数
模板
类比较优先
{
公众:
布尔运算符()(常数std::pair&l,常数std::pair&r)
{
返回l.first
。。。总的来说:

  // use of sorting algorithm : error here
  pointsQueue.sort(< int, std::vector<int,3> >compareFirst);
//使用排序算法:此处出错
排序(compareFirst);

但是我得到一个“预期的主表达式在”之前。第一个问题是没有这样的类型
std::vector
。假设您打算使用三元素数组,
std::array
(或者std::tr1::array或boost::array,取决于编译器)就是您需要的,或者只是
std::vector

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

以下文件在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> >());
}
#包括
#包括
typedef std::pairpointPairType;
typedef std::listpointListQueueType;
pointListQueueType点队列;
模板
结构比较优先
{
布尔运算符()(常数std::pair&l,常数std::pair&r)常数
{
返回l.first());
}

非常感谢您提供了这个非常详细的答案。事实上,我写这个示例太快了(std::vector错误)。再次感谢!