STL is_permutation排序演算法
阿新 • • 發佈:2018-12-14
is_permutation() 演算法可以用來檢查一個序列是不是另一個序列的排列,如果是,會返回 true。下面是在這個演算法中使用 lambda 表示式的示例:
std::vector<double> data1{ 44.5, 22.0, 15.6, 1.5 }; std::vector<double> data2{ 22.5, 44.5, 1.5, 15.6 }; std::vector<double> data3{ 1.5, 44.5, 15.6, 22.0 }; auto test = [](const std::vector<double>& d1, const std::vector<double>& d2) { std::copy(std::begin(d1), std::end(d1), std::ostream_iterator<double> {std::cout, " "}); std::cout << (is_permutation(std::begin(d1), std::end(d1), std::begin(d2)) ? "is" : "is not") << " a permutation of "; std::copy(std::begin(d2), std::end(d2), std::ostream_iterator<double>{std::cout, " "}); std::cout << std::endl; }; test(data1, data2); test(data1, data3); test(data3, data2);
lambda 表示式 test 用 is_permutation() 來評估引數是否是另一種排列。
演算法的引數是一對用來定義被比較範圍的迭代器。返回的布林值會用來選擇輸出兩個字串中的哪一個。輸出如下:
44.5 22 15.6 1.5 is not a permutation of 22.5 44.5 1.5 15.6
44.5 22 15.6 1.5 is a permutation of 1.5 44.5 15.6 22
1.5 44.5 15.6 22 is not a permutation of 22.5 44.5 1.5 15.6
第二個序列可以包含比第一個序列還要多的元素,但是隻會被認為擁有第一個序列中的元素個數。使用的時候需要注意,如果第二個序列包含的元素少於第一個序列,會產生未定義的錯誤。