【发布时间】:2014-08-01 14:04:56
【问题描述】:
我正在寻找一种合理的方法来根据容器的值类型选择排序算法。
在其当前形式中,我可以为整数/非整数数据推断出正确的sort(a, b)。
#include <cstdlib>
#include <type_traits>
#include <algorithm>
#include <vector>
#include <iostream>
namespace sort_selector{
template<typename T>
void _radix_sort(T begin, T end){
// radix implementation
}
template<typename T>
typename std::enable_if<
std::is_integral<typename T::value_type>::value>::type
sort(T begin, T end){
std::cout << "Doing radix" << std::endl;
sort_selector::_radix_sort(begin, end);
}
template<typename T>
typename std::enable_if<
!std::is_integral<typename T::value_type>::value>::type
sort(T begin, T end){
std::cout << "Doing sort" << std::endl;
std::sort(begin, end);
}
}
int main(int argc, char** argv) {
std::vector<double> for_stdsort = {1, 4, 6, 2};
std::vector<int32_t> for_radixsort = {1, 4, 6, 2};
//std::array<int32_t, 4> array_for_radixsort = {1, 4, 6, 2};
sort_selector::sort(std::begin(for_stdsort), std::end(for_stdsort));
sort_selector::sort(std::begin(for_radixsort), std::end(for_radixsort));
//sort_selector::sort(std::begin(array_for_radixsort),
// std::end(array_for_radixsort));
return 0;
}
- 我希望能够使用类似数组的迭代器。 (它们没有 ::value_type)。
- 我希望能够区分 int32_t 和 int64_t。
我完全不知道如何以任何相当简单的方式实现这一目标。 IE。不是专门针对每个实例。
【问题讨论】:
-
如果您希望指针正常工作,请使用
std::iterator_traits<T>::value_type而不是T::value_type。