使用 boost::range::sort
Using boost::range::sort
我很欣赏如何使用 boost::sort
的示例(我正在尝试对定制的对象容器进行排序,因此不能使用 std::sort
)。 documentation中的例子很少;此外,我找不到有关如何创建 RandomAccessRange
.
的任何信息
您没有创建 RandomAccessRange。
你有个射程。并且应该可以使用默认方法从中获取随机访问迭代器(std::begin(r)
、boost::begin(r)
或 r.begin()
,以及 cbegin
)
auto r1 = "I am a range of char";
auto r2 = "me too!";
auto r3[] = { r1, r2 }; // a range of const char*
auto r4 = std::vector<std::string> { r1, r2 }; // two strings
auto r5 = std::list<std::string> { begin(r3), end(r3) }; // idem
现在无论您如何获得范围,您都可以使用
std::sort(begin(r), end(r));
或使用 Boost 的范围版本:
boost::sort(r);
如您所见,boost::sort 只是做完全相同的语法糖
完整示例:注意 使用排序谓词的微妙之处(参见 std::less<>
那里)
#include <boost/range/algorithm.hpp>
#include <vector>
#include <list>
using namespace boost;
int main() {
auto r1 = "I am a range of char";
auto r2 = "me too!";
const char* r3[] = { r1, r2 }; // a range of const char*
auto r4 = std::vector<std::string> { r1, r2 }; // two strings
auto r5 = std::list<std::string> { begin(r3), end(r3) }; // idem
std::sort(begin(r3), end(r3)); // sorts by pointer value
boost::sort(r3); // sorts by pointer value
std::sort(begin(r3), end(r3), std::less<std::string>()); // sorts the strings
boost::sort(r3, std::less<std::string>()); // sorts the strings
//// but this won't compile:
// boost::sort(r5); // not random traversal category
}
我很欣赏如何使用 boost::sort
的示例(我正在尝试对定制的对象容器进行排序,因此不能使用 std::sort
)。 documentation中的例子很少;此外,我找不到有关如何创建 RandomAccessRange
.
您没有创建 RandomAccessRange。
你有个射程。并且应该可以使用默认方法从中获取随机访问迭代器(std::begin(r)
、boost::begin(r)
或 r.begin()
,以及 cbegin
)
auto r1 = "I am a range of char";
auto r2 = "me too!";
auto r3[] = { r1, r2 }; // a range of const char*
auto r4 = std::vector<std::string> { r1, r2 }; // two strings
auto r5 = std::list<std::string> { begin(r3), end(r3) }; // idem
现在无论您如何获得范围,您都可以使用
std::sort(begin(r), end(r));
或使用 Boost 的范围版本:
boost::sort(r);
如您所见,boost::sort 只是做完全相同的语法糖
完整示例:注意 使用排序谓词的微妙之处(参见 std::less<>
那里)
#include <boost/range/algorithm.hpp>
#include <vector>
#include <list>
using namespace boost;
int main() {
auto r1 = "I am a range of char";
auto r2 = "me too!";
const char* r3[] = { r1, r2 }; // a range of const char*
auto r4 = std::vector<std::string> { r1, r2 }; // two strings
auto r5 = std::list<std::string> { begin(r3), end(r3) }; // idem
std::sort(begin(r3), end(r3)); // sorts by pointer value
boost::sort(r3); // sorts by pointer value
std::sort(begin(r3), end(r3), std::less<std::string>()); // sorts the strings
boost::sort(r3, std::less<std::string>()); // sorts the strings
//// but this won't compile:
// boost::sort(r5); // not random traversal category
}