1. 程式人生 > >STL is_permutation排序演算法

STL is_permutation排序演算法

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

第二個序列可以包含比第一個序列還要多的元素,但是隻會被認為擁有第一個序列中的元素個數。使用的時候需要注意,如果第二個序列包含的元素少於第一個序列,會產生未定義的錯誤。