Первая проблема заключается в том, что такого типа нет std::vector<int, 3>
. Предполагая, что вы хотите использовать трехэлементные массивы, std::array<int, 3>
(или std :: tr1 :: array или boost :: array, в зависимости от компилятора) - это то, что вам нужно, или просто std::vector<int>
.
Во-вторых, эти int
и std::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> >());
}