I've tried to sort a vector of pairs, using approaches outlined in How do I sort a vector of pairs based on the second element of the pair?, but my compiler can't seem to resolve my templates.
The problem region looks approximately as follows:
template <typename T, typename Tds1, typename Tds2>
void myClass<T,Tds1,Tds2>::myMethod(myTemplateParam<T> &in,
myTemplateParam<T> &out) {
typedef std::pair <Tds2, T> labelDistPair;
std::vector< labelDistPair > labelRanks;
struct sort_pairs {
bool operator()(const std::pair<Tds2, T> &left,
const std::pair<Tds2, T> &right)
{return left.second < right.second;}
};
//...
//Fill in labelRanks - a vector of <float, double> pairs
//...
std::sort(labelRanks.begin(), labelRanks.end(), sort_pairs());
}
}
The most relevant part of my error message seems to be:
/usr/include/c++/4.8/bits/stl_algo.h:5474:5: note: template argument deduction/substitution failed: ... error: trying to instantiate ‘template void std::sort(_RAIter, _RAIter, _Compare)’
Does this make sense? (I've gotten a similar error when I tried using a lambda function as the comparison function)