diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-01-19 10:42:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-19 10:42:13 +0100 |
| commit | 2a4381d8eaad4f9f0eb5a4e624e7b154640690f1 (patch) | |
| tree | cd6e1a487e81f61a16e87f840e529d53d3631f43 | |
| parent | 5d2928f7b9eaea9c00ed7695143c0f71c5f53786 (diff) | |
| parent | 06b17a21813c2869ee50cbc4c8a92a04e40d2959 (diff) | |
| download | rust-2a4381d8eaad4f9f0eb5a4e624e7b154640690f1.tar.gz rust-2a4381d8eaad4f9f0eb5a4e624e7b154640690f1.zip | |
Rollup merge of #89621 - digama0:patch-2, r=yaahc
doc: guarantee call order for sort_by_cached_key `slice::sort_by_cached_key` takes a caching function `f: impl FnMut(&T) -> K`, which means that the order that calls to the caching function are made is user-visible. This adds a clause to the documentation to promise the current behavior, which is that `f` is called on all elements of the slice from left to right, unless the slice has len < 2 in which case `f` is not called. For example, this can be used to ensure that the following code is a correct way to involve the index of the element in the sort key: ```rust let mut index = 0; slice.sort_by_cached_key(|x| (my_key(index, x), index += 1).0); ```
| -rw-r--r-- | library/alloc/src/slice.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/library/alloc/src/slice.rs b/library/alloc/src/slice.rs index 8853577371a..a5c4140e313 100644 --- a/library/alloc/src/slice.rs +++ b/library/alloc/src/slice.rs @@ -375,7 +375,10 @@ impl<T> [T] { /// Sorts the slice with a key extraction function. /// - /// During sorting, the key function is called only once per element. + /// During sorting, the key function is called at most once per element, by using + /// temporary storage to remember the results of key evaluation. + /// The order of calls to the key function is unspecified and may change in future versions + /// of the standard library. /// /// This sort is stable (i.e., does not reorder equal elements) and *O*(*m* \* *n* + *n* \* log(*n*)) /// worst-case, where the key function is *O*(*m*). |
