簡體   English   中英

C++ 標准庫中的確定性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM