[英]Determinism in C++ standard library
std::sort
不能保證是穩定的。
它是否保證是確定性的?
例如,這段代碼是否總是打印1
?
struct S
{
int a, b;
};
bool cmp(const S& lhs, const S& rhs)
{
return lhs.a < rhs.a;
}
int main()
{
std::vector<S> seq1 = {{1, 2}, {1, 3}};
std::vector<S> seq2 = seq1;
std::sort(seq1.begin(), seq1.end(), cmp);
std::sort(seq2.begin(), seq2.end(), cmp);
std::cout << (seq1.back().b == seq2.back().b) << '\n';
}
此外,C++ 標准庫是否具有一般確定性(除了明顯不確定的元素,如 RNG 和時鍾)?
使用std::sort
對范圍進行排序后,對范圍的唯一要求是元素根據提供的謂詞進行排序。 因此,如果有多個可能的有效排序,那么只要生成其中任何一個,實現就符合要求。
每次在同一范圍上調用std::sort
時,允許實現生成不同的排序。 它還可以在每次執行程序時生成不同的排序。
以下是對std::sort
的要求。 請注意,沒有提到每次結果范圍都相同的任何要求,因此不能保證結果是確定性的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.