Std:list.sort(),二元谓词
std::list.sort(), binary predicate?
我有一个列表容器类(不是std::list
),可以存储任何类型。我想在这个容器中储存很多std::listS
不同类型(list<int>
、list<string>
等)。
我可以使用一个通用的二进制谓词,当我排序他们?
伪代码:
template <typename T>
bool compare(const T& input1, const T& input2)
{
return input1>input2;
}
for(auto i = myList.begin(); i!=myList.end(); ++i) //i is an iterator to a std::list
{
(*i).sort(compare<decltype(*i)::value_type>);
//when dereferencing i I get a
//std::list
}
这是有效的(我不确定我是否可以使用decltype这种方式)?
问题是我甚至不能得到这个简单的例子编译:
#include <iostream>
#include <list>
using namespace std;
template <typename T>
void display(const T& input)
{
for(auto i = input.cbegin(); i!=input.cend(); ++i)
cout << *i << ' ';
cout << endl;
return;
}
template <typename R>
class SomeFunc
{
public:
bool operator ()(const R& in1, const R& in2)
{
return in1>in2;
}
};
template <typename R>
bool someFunc(const R& in1, const R& in2)
{
return in1<in2;
}
int main()
{
list<int> myList;
myList.push_back(5);
myList.push_back(137);
myList.push_back(-77);
display(myList);
myList.sort(SomeFunc<decltype(myList)::value_type>());
display(myList);
myList.sort(someFunc<decltype(myList)::value_type>);
display(myList);
cin.ignore();
return 0;
};
更正:它确实在这里编译:http://ideone.com/ZMcjSJ但不是在我的VS2012上…我开始讨厌vs了,谁能解释一下为什么它不能在VS2012上编译?我显然在VS2012中有decltype命令,但我想它不像c++ 11 dectype那样工作?http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx
我在CodeBlocks中使用gnu gcc设置为c++ 11 -工作正常
是的,方法std::list<T>::sort()
有一个接受比较函子的重载:
template <typename T>
struct MyComparator
{
bool operator() const (const T& input1, const T& input2)
{
return input1 > input2;
}
};
...
myList.sort(MyComparator<T>());
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 为 C++11 算法组合多个谓词
- 处理 std::enable_if<...中谓词的逻辑"OR">
- std::map与谓词与初始化列表
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 排序谓词没有传递对索引对象的引用?
- 将 unordered_map 与 Catch2 谓词一起使用时类型不匹配
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 重写派生类中的二元运算符
- 如何在算法中使用谓词函数find_if?
- 是否可以使用三元切换/控制/谓词成员函数调用?
- 评估C 中的二元谓词
- 在使用二元谓词的find_first_of函数上给出错误
- Std:list.sort(),二元谓词
- 实现推力二元谓词
- STL映射和multimap中二元谓词的行为…
- 理解Thrust中的二元谓词