Go to file
Marc Mutz 6f5c78fe3d QFlatMap: add remove_if
The existing API of QFlatMap did not allow efficient removal of
elements:

- std::remove_if does not apply, because it works by moving elements
  back in the range onto those that need to be removed, which doesn't
  work in flat_map's case, because, like for all associative
  containers, the key in value_type is const.

- The node-based erase-loop (over it = cond ? c.erase(it) :
  std::next(it)) works, but, unlike in traditional associative
  containers, is quadratic, because flat_map::erase is a linear
  operation.

According to Stepanov's principle of Efficient Computational Basis
(Elements of Programming, Section 1.4), we're therefore missing API.

Add it.

I couldn't make up my mind about the calling convention for the
predicate and, despite having authored a merged paper about erase_if,
can never remember what the predicate is supposed to take, so be fancy
and accept all: (*it), (it.key(), it.value()), (it.key()). This means
that unary predicates can either not be generic or must be properly
constrained to distinguish between pair<const K, V> and K, but that's
not necessarily a bad thing.

There's no reason to supply a Qt-ified removeIf on top of the standard
name, because this is private API and doubling the names would do
nothing except double the testing overhead.

Fixes: QTBUG-100983
Change-Id: I12545058958fc5d620baa770f92193c8de8b2d26
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-03 00:25:14 +01:00
.github/workflows Repair github action workflow 2021-11-10 18:57:33 +01:00
bin Provide a qtpaths wrapper script when cross-building Qt 2021-11-08 13:41:03 +01:00
cmake Bootstrap: Make compiler warnings fatal 2022-03-02 11:03:44 +01:00
coin Clean up QNX platform configs and improve testrunner scripts 2022-02-14 12:56:06 +01:00
config.tests CMake: remove unused config.tests (atomicfptr, avx512 and stl) 2022-02-15 09:20:34 -03:00
dist Add Qt 6.0.0 changes file 2020-11-16 10:02:08 +02:00
doc Doc: Add \include snippets with optional parameters 2022-02-28 12:39:55 +01:00
examples Avoid using deprecated API in the icons example 2022-02-24 20:17:41 +01:00
lib
libexec Install 3rdparty headers for static builds 2022-02-19 01:52:32 +01:00
mkspecs qmake: Enforce linker response files for WebAssembly on Windows 2022-02-21 12:37:19 +01:00
qmake qmake: Fix overlong command lines for static Qt builds on Windows 2022-02-21 12:37:19 +01:00
src QFlatMap: add remove_if 2022-03-03 00:25:14 +01:00
tests QFlatMap: add remove_if 2022-03-03 00:25:14 +01:00
util CMake: Rename FindZSTD to FindWrapZSTD 2022-02-28 23:08:20 +01:00
.cmake.conf Bump version to 6.4.0 2022-01-31 17:20:06 +02:00
.gitattributes Give batch files CRLF line endings 2020-11-04 15:02:29 +00:00
.gitignore Assume qhelpgenerator in libexec instead of bin 2021-11-08 19:27:32 +01:00
.lgtm.yml Skip LGTM analysis for the bootstrap library and tools 2020-07-16 01:04:34 +02:00
.tag
CMakeLists.txt Use REALPATH based check for symbolic links on Windows 2022-01-07 14:31:38 +01:00
conanfile.py Conan: Include Android specific option values in 'package_id' 2022-03-01 00:01:04 +00:00
config_help.txt configure: CMake: Add -no-prefix option 2022-02-24 19:46:01 +01:00
configure Remove unsupported, host-related options from configure shell script 2021-08-05 02:44:27 +02:00
configure.bat configure.bat: Fix call without arguments 2022-02-16 12:05:48 +01:00
configure.cmake CMake: Rename FindZSTD to FindWrapZSTD 2022-02-28 23:08:20 +01:00
dependencies.yaml
LICENSE.FDL Remove trailing whitespace in LICENSE.FDL 2021-11-26 18:28:49 +01:00
LICENSE.GPL2
LICENSE.GPL3
LICENSE.GPL3-EXCEPT
LICENSE.LGPL3
LICENSE.QT-LICENSE-AGREEMENT Update LICENSE.QT-LICENSE-AGREEMENT 2022-02-16 17:19:34 +02:00
qt_cmdline.cmake configure: CMake: Add -no-prefix option 2022-02-24 19:46:01 +01:00
sync.profile Network: Use public suffix database in DAFSA format 2022-02-24 19:36:26 +01:00