https://github.com/nvidia/cucollections
https://github.com/nvidia/cucollections
cpp cpp17 cuda datastructures gpu hashmap hashset hashtable
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/nvidia/cucollections
- Owner: NVIDIA
- License: apache-2.0
- Created: 2019-12-09T21:45:02.000Z (over 5 years ago)
- Default Branch: dev
- Last Pushed: 2025-05-14T00:12:34.000Z (2 months ago)
- Last Synced: 2025-05-14T02:16:56.577Z (2 months ago)
- Topics: cpp, cpp17, cuda, datastructures, gpu, hashmap, hashset, hashtable
- Language: C++
- Homepage:
- Size: 7.11 MB
- Stars: 537
- Watchers: 15
- Forks: 93
- Open Issues: 74
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README
# cuCollections
Examples
Doxygen Documentation (TODO)`cuCollections` (`cuco`) is an open-source, header-only library of GPU-accelerated, concurrent data structures.
Similar to how [Thrust](https://github.com/thrust/thrust) and [CUB](https://github.com/thrust/cub) provide STL-like, GPU accelerated algorithms and primitives, `cuCollections` provides STL-like concurrent data structures. `cuCollections` is not a one-to-one, drop-in replacement for STL data structures like `std::unordered_map`. Instead, it provides functionally similar data structures tailored for efficient use with GPUs.
## Development Status
`cuCollections` is still under heavy development. Users should expect breaking changes and refactoring to be common.
### Major Updates
__11/01/2024__ Refined the term `window` as `bucket`
__01/08/2024__ Deprecated the `experimental` namespace
__01/02/2024__ Moved the legacy `static_map` to `cuco::legacy` namespace
## Getting cuCollections
`cuCollections` is header only and can be incorporated manually into your project by downloading the headers and placing them into your source tree.
### Adding `cuCollections` to a CMake Project
`cuCollections` is designed to make it easy to include within another CMake project.
The `CMakeLists.txt` exports a `cuco` target that can be linked[1](#link-footnote)
into a target to setup include directories, dependencies, and compile flags necessary to use `cuCollections` in your project.We recommend using [CMake Package Manager (CPM)](https://github.com/TheLartians/CPM.cmake) to fetch `cuCollections` into your project.
With CPM, getting `cuCollections` is easy:```cmake
cmake_minimum_required(VERSION 3.23.1 FATAL_ERROR)include(path/to/CPM.cmake)
CPMAddPackage(
NAME cuco
GITHUB_REPOSITORY NVIDIA/cuCollections
GIT_TAG dev
OPTIONS
"BUILD_TESTS OFF"
"BUILD_BENCHMARKS OFF"
"BUILD_EXAMPLES OFF"
)target_link_libraries(my_library cuco)
```This will take care of downloading `cuCollections` from GitHub and making the headers available in a location that can be found by CMake. Linking against the `cuco` target will provide everything needed for `cuco` to be used by the `my_library` target.
1: `cuCollections` is header-only and therefore there is no binary component to "link" against. The linking terminology comes from CMake's `target_link_libraries` which is still used even for header-only library targets.
## Requirements
- `nvcc 11.5+`
- C++17
- Volta+
- Pascal is partially supported. Any data structures that require blocking algorithms are not supported. See [libcu++](https://nvidia.github.io/libcudacxx/setup/requirements.html#device-architectures) documentation for more details.## Dependencies
`cuCollections` depends on the following libraries:
- [CUDA C++ Core Libraries (CCCL)](https://github.com/NVIDIA/cccl)
No action is required from the user to satisfy these dependencies. `cuCollections`'s CMake script is configured to first search the system for these libraries, and if they are not found, to automatically fetch them from GitHub.
## Building cuCollections
Since `cuCollections` is header-only, there is nothing to build to use it.
To build the tests, benchmarks, and examples:
```bash
cd $CUCO_ROOT
mkdir -p build
cd build
cmake .. # configure
make # build
ctest --test-dir tests # run tests
```
Binaries will be built into:
- `build/tests/`
- `build/benchmarks/`
- `build/examples/`### Build Script:
Alternatively, you can use the build script located at `ci/build.sh`. Calling this script with no arguments will trigger a full build which will be located at `build/local`.
```bash
cd $CUCO_ROOT
ci/build.sh # configure and build
ctest --test-dir build/local/tests # run tests
```For a comprehensive list of all available options along with descriptions and examples, you can use the option `ci/build.sh -h`.
## Code Formatting
By default, `cuCollections` uses [`pre-commit.ci`](https://pre-commit.ci/) along with [`mirrors-clang-format`](https://github.com/pre-commit/mirrors-clang-format) to automatically format the C++/CUDA files in a pull request.
Users should enable the `Allow edits by maintainers` option to get auto-formatting to work.### Pre-commit hook
Optionally, you may wish to setup a [`pre-commit`](https://pre-commit.com/) hook to automatically run `clang-format` when you make a git commit. This can be done by installing `pre-commit` via `conda` or `pip`:```bash
conda install -c conda-forge pre_commit
``````bash
pip install pre-commit
```and then running:
```bash
pre-commit install
```from the root of the `cuCollections` repository. Now code formatting will be run each time you commit changes.
You may also wish to manually format the code:
```bash
pre-commit run clang-format --all-files
```### Caveats
`mirrors-clang-format` guarantees the correct version of `clang-format` and avoids version mismatches.
Users should **_NOT_** use `clang-format` directly on the command line to format the code.## Documentation
[`Doxygen`](https://doxygen.nl/) is used to generate HTML pages from the C++/CUDA comments in the source code.### The example
The following example covers most of the Doxygen block comment and tag styles
for documenting C++/CUDA code in `cuCollections`.```c++
/**
* @file source_file.cpp
* @brief Description of source file contents
*
* Longer description of the source file contents.
*//**
* @brief Short, one sentence description of the class.
*
* Longer, more detailed description of the class.
*
* A detailed description must start after a blank line.
*
* @tparam T Short description of each template parameter
* @tparam U Short description of each template parameter
*/
template
class example_class {void get_my_int(); ///< Simple members can be documented like this
void set_my_int( int value ); ///< Try to use descriptive member names/**
* @brief Short, one sentence description of the member function.
*
* A more detailed description of what this function does and what
* its logic does.
*
* @param[in] first This parameter is an input parameter to the function
* @param[in,out] second This parameter is used both as an input and output
* @param[out] third This parameter is an output of the function
*
* @return The result of the complex function
*/
T complicated_function(int first, double* second, float* third)
{
// Do not use doxygen-style block comments
// for code logic documentation.
}private:
int my_int; ///< An example private member variable
};
```### Doxygen style check
`cuCollections` also uses Doxygen as a documentation linter. To check the Doxygen style locally, run
```bash
./ci/pre-commit/doxygen.sh
```## Data Structures
We plan to add many GPU-accelerated, concurrent data structures to `cuCollections`. As of now, the two flagships are variants of hash tables.
### `static_set`
`cuco::static_set` is a fixed-size container that stores unique elements in no particular order. See the Doxygen documentation in `static_set.cuh` for more detailed information.
#### Examples:
- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJx9VgtvIjcQ_ivTraqSu-UVKTqJPFSapCq6EzmF3J1OpSLGa1grxqZ-wFHEf--MvcvjHk0kYD3jmW9mvs_rbeaEc9Jol_X-2mayyHrdPFNMzwObi6yX8VCwLM-cCZbTc_vVWMMruDXLjZXz0kODn8F55_y8iR8XOQw_Du4Gfbh9eHz_8Nh_GjwMW7QhbnonudBOFBB0ISz4UkB_yTh-VZYcPgpLaOC81YEGOYyzyjbOzi5jlI0JsGAb0MZDcALDSAczqQSIL1wsPUgN3CyWSjLNBaylL2OqKk6EA5-rIGbqGfoz3LHEp9mxJzC_h05_pffLXru9Xq9bLMJuGTtvq-Ts2u8Gt_fD0X0Toe-3fdAK2wtW_BOkxcKnG2BLRMbZFPEqtgZjgc2tQJs3hHxtpZd6noMzM79mVsQ4hXTeymnwJ82rcWL9xw7YPqaxcf0RDEbjDH7vjwajPMb5NHj68-HDE3zqPz72h0-D-xE8POKwhncDGhU-_QH94Wd4Oxje5SCwdZhKfFlaqgKhSmqrKFIPR0KcwJiZBMstBZczyaGmEczNSliNZcFS2IVMhEOQRYyj5EJ65uPaN8XFVO2xHuufpeYqFAKueOCm7WgLnzjhWzyUN197FAw9ivYsaE6Rmbo5tvvSBufbhVhhlslKcG9sq_yeizJznJb6vtHhXAWSrPV1fmlwHIItTjbFOl30bL9K_Pgt8rZE78k0qJeJ-MKwwwIrSuaplWIGd2KBvfGWeYEdctTRiqmHJuC8KQKOm6JB__3AHYT3hK5kjcuApEKOqA3SbWUSE2fWLGLAuBkHE50CaZWmWhiancHhVWNS8kXAs8T5WP-MxIhZnrnRpCb3HCkIhApxvojNAQpOUmqP0pO6sTKyOBvrLa5jKsrwVmzgGmH5S2oSQLsN94ul34BTxifgVhAZhfZJTfTbrvD3OKNFqYXCFqyYCsK1qG7kZXoCV5qgcBN2TSicOG5ygZdVHl8yTx3Ac0UgWcFwHiwJEo8b-l4GDwXzjCqJODmNhKQBgiBOsMxJDQGLaHYPNQzDYkohUy9I6AgiNU-QBHCMRa_n5L9i4o_i6rCYxA3XcNH5tdPpHCLe4vmGWgdOB5HEBk2Zq5SPvr-AMgwnx4jWtIMFzHkITNZJsmLsTuvi8rsgDtGvk5ELqRp7VO3jOGfH2IirgdPAIgfiCYzdVYJh0Oc66nM11TT6ZheYixSM7UydqvsZm06qR4B7xl_hFG4owbaOmFc--4Fsvx3NbneEFCWKTSSUScf7EW07OXRzOM-h1cpB7mhD0nyvd3JoJBC0Z9-Y-Jrae9ehG1EGUzFH4p_lSRRCF_S7c9S8QWQFdk6phATFYJIymSup2jgqPPQSf34Y9ijmCHHSmUFKRr0E5X9cztQYdYOeeA6fFFR3rBT8BeTsgI80WekeCYh6icfSAWZ9JvxP_TFbbTpKhncBOdskZe7zlWyFZ5kQOm0jV8JcMRbdIuRJNCJv6yrJYGaNk1R15goGvTOIX0h0WRBb_Ga7q-FgyY3T4GewrVRh8Gi4usITaBQ4xxflT_BHzF5jbo0xRnYJuxTKCh-sBlIzruDdii4r-BqwhytYplecd88vQhfNZunT_SxrYr5r_vp19w00meXltVtM3nSg2URVe_zwWIkomootpvHSpuT0KCbnXOHiKt2wcAFFql-yXV7bUTsndmRGtvs7_v8HAzB-mg==))
- [Device-ref APIs for individual operations](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJztWG1v4zYS_itTFcU5G_klQfdaeJPgfMkWNVokRZJtUdSFSlO0xYssqiJlxw3y3-8ZUrLsTbZogft4CZBYmuEzz7xwOPRTZJW12hQ2Gv_yFOk0Gp_EUS6KZS2WKhpHsk5FFEfW1JXk5-GbWUFv6NKU20ovM0c9eUSno9PTPv68jen6x-nVdEKXN7c_3NxO7qc31wNe4Bd9r6UqrEqpLlJVkcsUTUoh8a-RxPSjqpgNnQ5G1GOFWdTIZtHRO4-yNTWtxJYK46i2CjDa0kLnitSjVKUjXZA0qzLXopCKNtpl3lSD4-nQzw2ImTsBfYEVJZ4W-5ok3I46_2TOlePhcLPZDISnPTDVcpgHZTv8fnr5_vrufR_Ud8s-FDnCS5X6vdYVHJ9vSZRgJsUcfHOxIVORWFYKMmeY-abSThfLmKxZuI2olMdJtXWVntfuIHgtT_i_r4DwiQKBm9zR9G4W0b8nd9O72OP8NL3_9ubDPf00ub2dXN9P39_RzS2SdX015VTh6RuaXP9M302vr2JSCB1MqceyYi9AVXNYVRpieKfUAY2FCbRsqaReaEltGdHSrFVVwC0qVbXSoeBAMvU4uV5pJ5x_98I5b2o4K2bF57qQeZ0qOpO1NEPLS2RilRvIOrv4WCMV0EiHi7qQjCzyi325y6raumGq1rCSrJV0phpkr6nkZols5a8LLfKqUGSDF_aNgacguFbJsjJ1aV-qgF6qFgew2iCLSqy86vBNqKF_-dpuqFZqoSo2mahHgWQoOB-05pVWC7pSK4TRwbRCMC0HvynqLl4NVt9q2Jz8MLXdDt1TKiuzhgLShJ1W9M3G529nnzaZlhlJVNpc8T5sCtjBben8rvOIbFqagncZEruozMrLUOmBBYTpXpKHQ2BYVTmYZRYg_6C2loENXmXCZv59bZmNKXj9LtTkQ-3rUGF_khP2YQZGiBPigaxtS1WIlULlulu1iGn3YlqUtZsydxQCop8ky9zMRZ4ktDY6JYlsm1Wyn9ZAsxegmFN8iOJ5Yxu7dDy2-g-VOCqOZsUTXCW2adFCwH5J5_SyWt5xLIgDZx1vPxI1_JfLhJGwIlgdj5s3jbpXclwtwFyOx_wxTUpROc174KzRvuh5IdpmgjpWIk3muZEPvaOjBgfB_ueX4OvNUw52CXeXlHGX-H-lV4NH5NYvCw9D6qh0ADp9pMOfc-rtrWogpukjHo4psPFPRweIjIl6g2M9hjxDJMkHkjjwgyYV7G5Mb3q-YI7ZuPeItXjV8fm-K17wPCueGf1vl8je-5va_cXa8ZvA_r2KiT_CR3GjRf6_jv7ndTQ3Jm-Iwp-2Y6Uw5E-YNnl_VmML8uJBE4xKFIgFnZ_TCFZC4n7Bgl-BuW_iHZfhXyhSBAMjiy56XFVtBYQ--J3aMmjhGh_RRd-vSrclmxuHDl4pNG4-xFXhwhTCn6s1Ps8ifgkeOSaFtchrZQd0n0HcPJHNTJ2n3OWtynFSYpGtZdbYcZlw3OQxjykc8mSkrCseZDCm8X_ULqXCCW7xnmdXi4opJohk0lKAE_2TzofrejVnyOYMQFGCRNjsikeHg63S4Rb1KvELzunt6B-j0ahDvMRciBkJxxZ2jUaA5sI2ExN0v0DsRUoLwePAbiN0wCxNghTYo8Hbd6-S6NDPg1Aqnfd2rIb7OEf73PjgriUnrDvo_PiKEOdKAHkWtdjIVkhuqID-CQnrD1sfVQ4YtVH1oeeZCTR35_sZcnHBFp5axLjR2aXl6WWCnp_3-KLKEUo-p8MUtEvU0yimk5hOYxoMYtK-vMPENB4fjFyBBK_ZhSfspla7hfb7bTBXS5T_UexXDFSR8ufRXginYXTgMCx0hXhlIl-0A1A3R_hxSDmfvO74eMVE84SNvpe909cNWoXkpzuLXjnkRjRHAF1-uJpAUHU5-cRUcXZ2dnL6NYJ4-vXFxUWvO-kwfvVCloLinxONP0X7DrHn0ZAnJXSCOnefThE3xovQvQ6S1FZBpuQD9z6R58Fp7jaF2VDXQ9ENmpAP6No4FZrGRlEpLBd7N1R6gci5f255D-yajKLf2h78G4VwYWLfZYGWCuOlyOMm5G5j-LqyMr7ztehm_h_F26stAT6-u9kUl6d2bGVQgTvVwq907STa2rW8Cm2OZfmWr198bVl4X-cqE2vdcbvn22lq0Ef5vsqXPzgGVAJPGe5PTDZUBWt6Pb4v5aI8rJLg_ke1cVgVrdJHddEVQhwy2Qr2Eombt15s2ww0uYQvCi6pIixj1b2DEmoeNPFCdLu2glhgFr0DU63lZtvyDY37EdojDjp0F7d9et4NDjhKD8H5BA291CBNZ2fohHe1lLiWfkbfeOst58EMGJE_VBmqUq6uCuIzAG-iOOKvBnBKV90XHlGxlvLk9G19ArEpXfg2JOrD3rk8Pj75ivqiktm5XSVfjajfx1ng8MfBE5X2c7Ga-69Icj3fw5RS5ni5Dt9n4AVae_EQPcetHPk6kGPXRc-_-t__AoyhE5s=))
- [One single storage for multiple sets](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/device_subsets_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJzNWYtOG0kW_ZU7XmllwNiYbDYZ89CwQLLWRJANZEajIeopd5ftGvrhqeq28SD-fc-tR7uNnSiRZqU1MsbdVfdx7rmPah5bRhqjity0Br8-tlTSGvQ7rVTkk0pMZGvQiqtEtDotU1Q65u-93bucdum8mC21mkxLasc7dHhw-GIfv1526Oqn4cXwjM6vP7y__nB2O7y-6vIGu-mdimVuZEJVnkhN5VTS2UzE-PB3OvST1GwNHXYPqM0L7lr-3l1r58hKWRYVZWJJeVFSZSTEKENjlUqSD7GclaRyiotsliqRx5IWqpxaVV6ONYd-8UKKUSmwXmDHDN_GzZUkytp0fk3Lcjbo9RaLRVdYs7uFnvRSt9j03g3PL69uLvdher3tY54CXtLyj0ppOD5akpjBsliMYG8qFlRoEhMtca8s2PKFVqXKJx0yxbhcCC2tnESZUqtRVa6BF-yE_80FgE_kAO7shoY3dy3619nN8KZj5fw8vP339cdb-vnsw4ezq9vh5Q1df0Cwri6GHCp8e0NnV7_Qj8Oriw5JQAdV8mGm2QuYqhhWmTgMb6RcM2NcOLPMTMZqrGIKNKJJMZc6h1s0kzpTjnAwMrFyUpWpUpT22oZzVlXvLr_L_6byOK0SScdxFRc9w1viyMgy0nLcjavp6ZY1hYZ-f3P9diJwO-kJrcVybWc51ZUpe4mcw4JoLmMI6U63LUFEq1huv2dikXc3tBYFAIDdcxlNdFHNzMYSkU4KUGCarXsDUxM5XrumCoRcivWFeZVJrWIrtLfrSPiDTQ7vj6lGgMxE8kEglgyNWzPSSo7pQmaIQgkTpaFpsWBSco4VuaRRld4T9pJHle_FMKCUlFVpqSCNvHQOLYcajMiseJUnaq6SSqTkEeBgz5XwZu0bBesRRzp7PzSrinFbYH0JfvwJJbBNL2EOdIOblmUiTZe0mMocckTKBLPpDsaCO0CZElEKwqoitjqtYcFaq2EqzJRN7qAGzLSIwSkYaYq0sutVPi_SOcCQQKtYsgZBBh9pAMSDweSfyNz6hkUeCJcot1yhJNM8t8AyvXNOed5k5ExoC6Lz75mx7Fd9gddLVB5Uq5zrltRdK9xqAeFohKIVT5Wcu1pTsaVWXcq1eiFtxc6LfL9Y2HRkxMvlTK4Q_wFlVXqLHUW4vLDipOYGmzKr9KxA2QM10mWXhiUv45Ks8lIiiW09M5ZCUJ-Bq1a8J4XIS1qg_GJNUtgVQVnN_1Xii4qZxrq5ElE8iQzzgV8n9PoIH71e75jQdD5e4Ncqx-gt5xhX9dfQAaomhjVOgSt3CwbSxWlDx6iK71FYrJ4T6tc6rqpshPoEiVgbV1pLOGLSApR3Ui3sVrJTuCH5ilYvSD442pAsU5lBrHENwUhdWiL8UUm9ZDhcUO_lMuLIQQgQD1J-lEsbz7BqposRPiODbpVJvwHAEpfHwQAZI4WO_Kpjjyy3iu0vtwuFSCCFIk6daFzlMRPiOBh0ehqMuWVtzFRdpIbO39JEi7xKBcK7_KyKr35ZFbbOOOvJ-Uht59RfpCAIn3dNF1StuG2z37i2gwrb6zkvETZbDRq56gtDiIT_GmLmkAw0c_dqCDtN_p0eOT3vtmdwqD8hk5_rw_Wgkz9yAYiatgwGYcVR2FpvCa9g7nrLXZn7rVhz8x0MXIKAmsjXyLWBb5bkmu1ggPlKpFFZrFj4zaK2pMo3y3gOep0KN2ibqwi5gN64gmc71NZUjzwqUdSsfhY7jAODgR1dGqS5OnXCTuix36EXHcI4_qpD33eoj-99XOjjSh-X-t8_eVZdZrNy6SsYhk0YybMeyo-rZPy35mZy1-KLyKwUA-VcpJU03Hpw23_jWl-lCXcggwoWswBTxVOnppyKkss8pnb0JpS5GMWTx10M8_w5q0prO4p-XdhWPks2MuIbwQj4uN8_Whty3AAztCjCmga4qI9FPZnUXbExi5GdxeoWeMnle7ONuFnHkIIUJJ-XaAOmvNbfrn5ram50Ve7xGfnMMfS-4DapOe7c_GwkuYh4mcXodyBofAeMoklajMDviOaFCtragWS7tVhUpEemLCe5wQkFGE44eTemTosc0ao1UckjIpZOkJf4M4lgcKlsYfdd4bRtb2IwiHzmjlDr7ts79lgGmtNbng2dA23MC-dvd3jukw_PVKnkAZradveFyroPwMd-GSYP-LLnO6f9tkO90O-bNmuxCFWI0-6Edts1tHuswNlk1zq06uUnzc1dLZHzSeTwKbRpu0Ln9ux4lXDN0crGl9tzieHVssoed-CvnTrR4dxG3sQTUxtrSEElurwi9Hh87O3t0KOrK-uWdX1YGf6Opc-v6pPz4-kuf9rC9bM09TKQa5bpfgQcF5U7Wn2JzlracOgKRHvOaQZqJIw7S1offZexNJZg7ur0hnTGYQ95Ib5ozv8oF8YI3_9ZJjyj-l_K9S8ynbH4Np7zjgbLP0iDuQ6DPuZ4LpFqjCjXT0XWY-un_UA1iiIzRQNJEBhmvbairG2Q0m64SSfIB-SAX-Ky48mLWGKYdIN6O9j1FYkE0__DLXM9HdfsdQsbobGGQ2ITtK5l05YE9OjEhU7YnU00MBKC6TJf4QFlZZGp-Fq3_-487dCuU_rdyUZ6f875z2BX2zR0xngoERMD61M66GzJRm7vdSqSkx1i4EMy0wB63L5r3VRxLI35jt5Yi9eEhfNJ9w42tnZ88EKN4khlOJq2QwrCytXZJnRhhAGFwXXUZD1pbMfPq4xPR_8MreVydVazj-2mAnVMUKLGY2nPYPyETRo7dCB_tkh0m212GXcE4nGtnqLsn3wzQpyg_fTxECA23y-evf_x7P1y7f3UTGFMSCoJqp1W91ipqfa07djQWNz141cbBq2lg9vRzAisOKK9PVWToymGn12gBkYjgSoVZlo_zMfClOtmuNKQiXtscMcQ-YAjfXlcT7XtJphM452ayPzxOQdBgDFHn91B8cJMetAoPpg7x-oBccrsg6Uiw0wowxY7ZZVFKVL21JPJWWdqlR4VfyyPjOXQwdEKtcaiBnRNpPg34rCGZFPe3klzOVz35cGb-ativz7ZA1O9qQkNj8LbveDktWdHUNjNysThCsW3xoHZ-rxjscQIEqMg6ySs79qQN1A-dw_stj_Dqox_RI1095laqzKrc6rl8OoE-bih_ymk7TBH4wRef_qHXkFA_Ux-gk6MqSMcLTiSKz2YiML29uYRIDjVZFvN0HoQWHnuH1U2_PoSKTbyaeM83bjwuM6JzpoTXHvbO-BFzZFPT541wcjtCRo0PbqErBFYnXEfN1F56tBj490w8mktR8PBee0pdwO_uieaet7YHIcbRx3brOzV4-NjPm0evj49PW2vxHgcuhNZNo4Mb9Tz7hKEcSv-WlG8Xsuy0rlNd7jY6rS4gqCT69U_tlr5PI77hy-rPm7zY2X7X6_WPihwEu_t9V_RvtDx9MRk0asD2t9H3yj3be1LZLKfimxk_xWWqlFDZhzHKS7O3f-tcAETdX7feuqE-wje2n0g3nr6ZH_-C-lzP2E=))
- [Using shared memory as storage](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/shared_memory_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVWIFuG7kR_RViiwJyTpbsoMUViixUZ7uokNQ-2E6Cw_mwpnYpifVqqSO5UnSG_71vhlztSo5b10GciBzODN_MvBnqKXHKOW1Klwx-fUp0ngxOu0khy3kl5yoZJFmVy6SbOFPZjD73392X4p04N6ut1fOFF53sSLw_ef-Xrrj6MrmYjMX59c3P1zfju8n1VY9kWf6TzlTpVC6qMldW-IUS45XM8E_c6YovypIj4n3vRHRI4D6Je_fJ0QfWsjWVWMqtKI0XlVNQo52Y6UIJ9S1TKy90KTKzXBValpkSG-0XbCrqYXfEL1GJmXoJeYkTK3yatSWF9DvX6Wfh_WrQ7282m55kt3vGzvtFEHb9T5Pzy6vby2O4vjv2uSyArLDq90pbXHy6FXIFzzI5hb-F3AhjhZxbhT1vyPON1V6X865wZuY30irWk2vnrZ5Wfg-82k_cvy0A-GQJ4Ma3YnJ7n4ifxreT2y7r-Tq5--f15zvxdXxzM766m1zeiusbBOvqYkKhwqd_iPHVL-Lj5OqiKxSggyn1bWXpFnBVE6wqDxjeKrXnxswEt9xKZXqmM1FnkJibtbIlriVWyi51yDU4mbOeQi-1l57XXlyOTfXvy_vyT7rMiipXYphVmek7OpKlTvleVi1GBxLGwBIE1iqdW1OtXC-I9N-FwPydE8YtAHCeLtXS2G2qvklcT0FdEJlarWbiApslwJVewT1H14lp0nhAgQu6RNDVeO0VdOIsfCokQLxV_kbN4EuazgszlUWairXROc7jKClLH4GVKjp-u1KlXKp4ZDBQ37wqfUrrYlpljxANSxTb__VDmEHFcuW3MLAdvtCORVY9EjsheFMiGVVxdF8-kY1-X3xFnLV1XsiiMBldjKFoXx7AGEs41QnxgFs99KKCO0YuCCBxqVKtJlIAqpmBvXllKhcv6GjVFca7bjy-WehswcY3rH-tMijTf0BBYWTu2Eyaxsim4sU9I3ItFN2ve2j21rKoVOfotw8UPzZ6hZ2u2ChyEKlQZZ7vJTNfyWJ3GzP9N5wRM2uWvG1R3tJaydkgZIUCr0XPdu7EldSqGfvU2Y9s7SJzH7uCe5MjqHANXyQA2wVBtYxHvS3T2K3Ndl6GuCuenpu_8fRRAwGFLaushTj0WyVBZkVmHkVfnN-NGzOMELZM9ghzL-twMCC-ToOKlOU6LTOTEvQnC8RzB2GNWeWIQBD5aN9R1ZEQK2EPiAz0TkOHN3bI3W7LbGFNWesOPsLlpXwEXpVFPtZnmY3EQlJjKbVbBMqLlhwUdQ6g4RSvMyA3oApqT0ju2IBkuRWzqsxILwz4ba-ppIVcK_IDHFM65PRSaGIUrMjaRFTsF9LD09XKWJQGXaLWSTlRUhfpMChUWBKU_IAcUdY_HDUBCiuUb4gPAWbVVJd5GgJlrOsEqghyrWteouXVoQ-biAC7EZby4HPMRDb4KsnENMFHOBFQjRkBDEJCxGzn3Mat9Ywb_0ZS_hlu_Gja89RROA33Kfwq0fwwRZBkjWoYEVQ7FWtQ0ZSIMwKf0xARwewK3VO9brxlJ0M3hqfBqQa-XtyOW69kWeblfo5RAoeTIjpEfY-9_W-5ts9DNQwYQpDDOvQjOOKYGKZEveikmCxouAmFw0RMBIsl97C7K-dhBuh9DYtEIm2QvuWx2XDPjsk3lS4MF6ypweHhIC1bRjCPQBGIuZwrG9U3cjE368ZwPv5yOb4bUGrUREOxQ3D2jGFqaEyEJR3mBsBHI5YCltrYQ0pqH0HSteL4SgHUB1rBPa_hpiC-gJvTYyY6ofIba736A6fKkXgS6Hiln3Xuk8ubm-ubgfiIOvhzzpQRNMFiEpNOPN-Xz-QBjiCNdNmhcaHuyCG2H7mOILBPSvcJ8zxGwJrlCSqJcRR3XwMr7nR70ykmfB7y1BInODd7O2YmwDgfLI5g2lTrkFfQGRThP59_YvnDaQMOjkIcaJj8zoTxdHz6XGf5V52DMRH3w94u8sryEGkNIjY_iDBrjt2TWeFMnNYqz5viF9yHBEl853zNKOFsPP0v1OWyWoqyWk7BM_VIUvefmu2o-nkkPBiHIr6BsFk7TE6ZvzD80BzqNThyLa2mZ0GtK2LIc8BQ0yxwenJyMiKUSSEgV4EEHhr3KUcyepygw9AdcODDQ5Mn7Qny7DUDNWYXXFDsdARcOPDNMjgYFMaNNGzsKy5wWto0igwjst24i3KVVeFT9NhFWpMR58moAR7UlDde0ATDFuYIY4B-JS3ai8ejUcgp-LzlmlMHF23GdTLzlpkZPy3E3niC3so05HA3c3hWqjDlvPE4DlbOIyy_Y7RMvWFI3nj2O9F4s9PMeHA9jXO9sf-P5RphntSGrSIcjV70LqJMPPKoFCmErUYDrlTgfTzaOXDNLBsD3zwhUAM61BNLbhS3iliP4f1ElbGxckV8R1PkXknyWC4kkeFDkxcPB-lTz-RIod0kU6fVYFDvDlsJew4ciD-NU6S7IQy6JShzjemSe4MFkdPrJni8K1nm0b1rNgOepsmXxggejJEfytFrf3e2Q9V7xP0R9FzZoLoE7HiI26YBwwZmtfjWeZ1Cg8CuemiASfe2hm2IRp1WpTw9t3rmJ4kbLNqBCQOxIJiJ--rHxG6IP3gI79sZDoenIKr3fxuNRodvpe88XD-EbpTLC3SrTLWmM56q0FiTbhJp2DZffyXlOstO3_-1OsW2Wfnw3Vhy7Hx-lv3ww-mP4ljabHHmlumPJ-L4GMD5Y3YjV_lxIZdT_sKs0NOWzizLCiyuw1dcWMBLsnxMnrv1PoDe28_VOnn-jf_8B80ktFI=))
- [Using set as mapping table to handle large keys or indeterministic sentinels](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/mapping_table_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy1WQ1v20YS_SsDHe4iJZRkKck1UGyjOqdFjRb2IXZaFLYhr8iVRITkqsulFJ3g_35vZknqw3KdHnIOHIvk7OybmTcfS60buc7z2GR5Y3CzbsRRY9ALGonKpoWa6sagERaRagSN3BQ25Ovuy9uMXtKZma9sPJ05aoYt6h_13wR08ev5h_MhnV1-_Pflx-H1-eVFh2VF_pc41FmuIyqySFtyM03DuQrxp3wS0K_aMhDqd46oyQK3jfLZbaP1XrSsTEGpWlFmHBW5hpo4p0mcaNJfQj13FGcUmnSexCoLNS1jN5OtSj0Ch34vlZixU5BXWDHH1WRbkpSrofPPzLn5oNtdLpcdJbA7xk67iRfOu7-cn_1wcfVDG9DrZZ-yBJ4lq_8oYgvDxytScyAL1Rh4E7UkY0lNrcYzZxj50sYuzqYB5Wbilspq0RPFubPxuHA7zqtwwv5tAbhPZXDc8IrOr24b9K_h1flVIHp-O7_-6fLTNf02_PhxeHF9_sMVXX5EsC4-nHOocPUjDS9-p5_PLz4EpOE6bKW_zC1bAagxu1VH3odXWu_AmBgPK5_rMJ7EIVUMoqlZaJvBLJprm8aeawAZiZ4kTmOnnNx7ZJxs1b3NbrO_xVmYFJGm47AITTfnJeEo164TFrPTfYlIQSLqKmvV6vTgI1fME73zyM1skbtupBfYe7TQoTO2s686NvC0Vqnc7r70cf5e-JcitjBy5Di6I_1FwVsa6Go6fD-2sZ7QB53CVmeV0znNzJJDz0yeqXxGMIgUnEOJMZ-LOYmyipkG6RZnKqFIOVWrvWeH3PvlIp5TXoQzViOPBoONs-45jLt3AfseC-ZzYx3Ik6zoTfcdqOo0fdar3Af7mrNsEylSNgbpaaxDxdAPQLAamljSmRRkOENKgs7tYRa1r5ZqTs2z4VVLdBuwoow_cwibIhNybf2tJm79UWh4Lm8FTBrxxEzZiNODMqxc8FalBXlpQlsMqDj2zl9iyw5dG9KZeLUymndNlJ1q2TwPoEJzolqDNOf04tzkYKY6c5VBiQk_V7b6SuHZX-YtJRqwOvSTWeKDDXydqpUuTZFEkFGS-IqrmUCCK4AmldIV6RBMg3ejAplm6i1mqLlki8zFqUbhyh3T4zGqTeEdRlHMzlRJsgoOxYpDiCggWFHEuc6pCvZ4R0MsNEkSS2HGU5MUQoFUu5mJtuhRG1fWO9FrxXt4sIiRPgr8Bu5MJ1CuuFZHKIacB0VWcGvIE4MQohDy3hXLCclShK6wGtFjH1c6FioppP4pBqbtAhr8PdGeIp1BUco4AsRVjONXKgck2J526MI4XfpWEAnz4ICSdytxxoE9uVZNcAtlXc_UIkax8H4IUX7H9QacY776aqmMHARazrRHEWfzwomh5FZz0SvNS38RqkfaccXMPAZsHUcHkIA8lZsU92MwCBSMNgQQWLnUI6iPmFpbJQjGVTFlLnoKMDrpLXnBeb5CLBnETo3KRDnH0KJYCid8CSyrFrQ9qloD30_bEkjOttLjcGMZmA0xifNIKAIIh0ogSX3vVCo_CcT7du_el9DHnsrVRNdFS4VhyfV7VnbT7t3ds1CciaNrtWegkUkFF9OZ48I1CiSHmFtJwBRcafghENftHvaLMbzCC23hZ9ur2WKsct-4S2M3kfsesdU-fmVDYYRcsDYhZMfPCzs3XJG5-nXo3JW8gEanQVQBk0uzgRNTFA1RX5cbR0uMQ5CJfMyqzVQyBWI3SzeNuG56vpt9QvTaVSbUfmFVlcluaWpr_UrH_krpmi63vCEJUO7iNHYHOdGUcTNTKHTX6Li-DlC6GvlN1hCvr5rX2BEiL4UaLRrQiD-s-b8HWj-wrMdOG_RnMx1-RsgnNUpPuoipE2KLOjTwSmxrNnqulroOcNI_qfby5iazXFif6IkDMUCKnGsiVOovu5K2lPTT9ROiVqMiZvQCPtEvKgtkqtmzwS_o8p_RqJxuRt5XPNvR2JikbMLGNltNUOZ1f-QYb0DVBSC1_BrWI46HO7vegaBJQm9I-w4puao8FKFUWcT0syCptImHNJ5PosFgqt3x0WlTQnkDRHctOjl5UsCKgO_6m5896d5z6np_SV3_OXX9v6Tu9XPqXu-o40MRCbdr-stT3H94_1y6SnWaFFlYFX9fex-V2U19kubsSfjNctkX1jqZ_eXXZPMWm1UB9Ac4LGAPEveSx0TZyw86k9hiWigpvM3gp4vtV3FWEPwPcXKxNBcZnmCNYMRCV6ObYu7N6F5A3h-IxzXPE2XXFKE_j8fCYLaQrSrX_8Mvw5AuXhPTQoNx5fgYx8sbHC3x4bHZfpEXCuigVO-x1E5KHFjS_4olT4F6Xa29Obr7U1wbwd7d10PbrOp_rfrXpeDd3S1i32ASMAc4zqmKsyYHo_I7uHo92x0c6lmxPLVgcs2qM041bPAIyT1_rpPEE7zgD7yQY86a_Uj3M_TtFBnBeFyUKRRQiMNWIF0i2BaTPnccmQKTWkBvPv1yevq-xHueqinXe95WxNC-_iOAZ8WUTZEn24akxuoKNpoOj-244kabItXy2I-TpfpNQ3liJuaXPkxUmGANT90y0G8dKXy9EJbTTPKQTnyYxTR_9j-GZ07X-45Z93pFQC_UCxzp0Hkfu2Td6wTUx-9r_L7pPDwEuwQ6VPj_35r7fdY8flrzW2j8J36_w--7b4r5G2ieqCT_Gnc8vN8LrbDupIxwh6-avhD7Vz2Dwc67Hok3Rb7P-DW-NNc5qHAI3ctAlfkeIzdwuC6z5r7OTtKZKXBgF1CL8u3WcmaS6vBnVTbV5SacvNWri_K9yfCqzg89mcRhrKUZKH9YKpPeZPKmrMzoocD0eV3iqTJTDkdyYD6YOFgeijakEKqFPzj7c9LWIYl1bfbYDJJoLG41gndGtdoTavdKH27FhTWN5s7isXd3h_9rtjqokmWERJoPmlyadt9hrf0N_YV74bHwgUM7cqdrCfhL6j8E3p1jrgJvj_5OiVEReMRhfoJ_W0QU7ZUt68dWPcnh-qc6k6wrS59f4rdNoF_ZEb87QCSPe8FmIhJ6nq53rzcbPDzJ1Xz_HP22ntT34uLXjGTNyRNJUgf-dH0UEAD2kYDIP598_D7WH-ibW8o6Y41-0OT3d1s3cS5ttlrb7Ciy-I9C-_03P88jaXLcW_vZv6VthL2gh9FhXMOAtdAjnFmaWyIVxkdqsiLdCdSJ7xH8yp1f0x3SEezvXVm5N0MhTta_5fDzAm8lD-SFPnLRlTWiitegGhdIxtKmwIwB6eg9_oiC9_TqVdzaGnQ_lgb7t1mEzVnj_isHL-7nP1_7brZsuInvNiMs_ymH3iM_uTSCBvfuONF28x1SI1uEYa__tujhsZk7_wVTow0fnISvXvW-o7ay4ewkT0ffHVG7jRLi2pLUkY7aiUrH8q1TEo-3dIZhmODmwn9PhBvoOtnnxkNQPUcW7TwHZRoPd_Lvv3bzBxQ=))### `static_map`
`cuco::static_map` is a fixed-size hash table using open addressing with linear probing. See the Doxygen documentation in `static_map.cuh` for more detailed information.
#### Examples:
- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyNVw1v2zYQ_Ss3DcOcVv4KEBRw4mBe0mJGC6eI0xZFXSg0RcdEJFEjKaee4f--O5Ky5cRA2wKxTd7H47t3R2kTGWGMVIWJBt82kUyjQT-OMlY8VOxBRIOIVymL4sioSnP63X01K-AVXKlyreXD0kKLn8Bp77TXxj9nMUw-j6_HI7i6uf14czu6G99MOuTgnD5ILgojUqiKVGiwSwGjknH8CDsxfBaa0MBppwctMphFYW8WnZy7KGtVQc7WUCgLlREYRhpYyEyA-MFFaUEWwFVeZpIVXMCTtEuXKsRxcOBrCKLmlqE9Q48Sfy2alsDsDjr9W1pbDrrdp6enDnOwO0o_dDNvbLofxldvJ9O3bYS-c_tUZEgvaPFvJTUefL4GViIyzuaIN2NPoDSwBy1wzypC_qSllcVDDEYt7BPTwsVJpbFazit7QF6NE8_fNED6WIHEjaYwns4i-Hs0HU9jF-fL-O6fm0938GV0ezua3I3fTuHmFos1uR5TqfDXOxhNvsL78eQ6BoHUYSrxo9R0CoQqiVaReg6nQhzAWCgPy5SCy4XkUMsIHtRK6AKPBaXQufSCQ5Cpi5PJXFpm3dqLw7lU3VkxK36XBc-qVMAFr7jqGnLhSc7KDq-Wl4cWdqkrY7upWGGUZCW4VbpDRi9MsDIsO74lrdAMHbtcVQUVJalXfmJvNSsMspH_xMFgcoEaPb67i9J5fjqeM3vowo1NU7E4WJMKJSFYfrDouDYuXveV1-hfrneWaJ3Mq-wxET8YVlkgq357rqVYwLXIsT6IyQqskqGqhm7ZFwI1RxFQchQNRh_HZt_8d2hKu24ZUNio02yNkl8p3w0LrXIX0DmjOJxRRfOClJUq0o8qiVAnlUw-ovRRItqiNF2OhSy8_MEIS_gexXoPwalIFhYbXxatlZLpyazY4A4modjvxRq7fIgx7fl-9TPLKrFbpfVuF97mpV2DyZT1R9GCWkQU1vc4fdcr_D6LaFEWIkNSVhTJdIgJ7Bb_C8xSVRk6IY8iQ52ik6n4MuSxS2aJE5x2AlsIFOeVpjGBQ5A-y8pCyiyjMzr8nIpEDQuCICZIQFJDcENsCO2-O50_13N7h2rvEawDmkmVzwmE47XrTKFkUhuaXfO6GIK6GlWRDgZG_icS20hSVDlBMhj4rPdnr9fbB7_CkY3jCzjNVonszpkJwwxt_4BMMRQCo04mD1Zhzn1g2k38Lsbudc7Oj4LYRx_6TS5k1tqh6jbjnDSxkfQrTtUGErq7VGZRHQ2L67XgJdPuO_nSh3GKdtw2SKv5ddr0R6GoQ6DJhoh3HeXUCTvUcTDY1XbzssrbQyOXcHOsuNtt44A4KJB76hs_kurmcQfxUiVTP5oGg4PBeoHCuwzFdzzuCHU39s6pjt1qmHbm4gGb8SRu-ndEkdJS79D_MKnT7y6th_iLiUMjPk8dlg-Te2XOkbDnfNBEUEH_m00v7iHzm37cx49OpwMbGcvtdldfbzfcYcrZI6ryxUXR8gWvrV7cPBcNSV9uMGUQCD6lDQalVjxjMk-0sJUuErsuxYUXA6WnOsW-7y8vQyKAb6EfjxYlnHQIR5n7DkkSipK03CnlCWzqwAAeBhxHsKFM3-T3Ogl-3Z7XvtuTRveNXW6kPssCjY55aixsETKihwCPsOUM4mD3GpqCCOGmSCNdX3SpLJDfn-s7SM0ZH1NaCPwObx-P0lGKkoB-DKdODlsnHIPRkE5mjOKS0axvSum-meC-PvwCuxLjwT0FTaxK6JJDsu7xRhSm-NPi8xk-_MWH7mgAw-HRoX5fM0aBfrkXm8Frw8bZ8bldLtb-viIGqDhNcjGh5f45vL4lGrTPlcrCgEbnkCXxLsPDjnDPa61jaJ5hDLiPCrcGLhfQep4QFRyuBoWX68UFjvlpxTk-AP8G79yJ6Hwh3gzjROew9eGC3ulSwxV8a6LXEHy40vuXq6hYcd4_Pav6uK1K69-8ojZmHPLXr_tvoM00Xw5NnrzpQbuNl5vFPxZPI9J2xvK5ex3L5LwRk3Oe4eLKvzvhAt5VxWO0jet9bMCDfZR3tP3u_v8PKKbiNA==))
- [Device-ref APIs for individual operations](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJzNWWtvG8cV_SsTFmkpa8WHUTcAJQpRbaclksqGJDsILGM93B2SA-8ru7OkGEL_vefemX1RtC2lXyoDJrkzc5_nvmZ3vUIVhU6Tojf5sOvpsDcZe71IJstSLlVv0gvKUPa8XpGWeUC_h89uE_FMvEyzba6XKyP6wZF4Pno-OsF_f_fE5fvZq9mFePnm6u2bq4ub2ZvLAR3gQ7_oQCWFCkWZhCoXZqXERSYDfLgVT7xXOUkjng9Gok8bbntu7bZ3dMpUtmkpYrkVSWpEWSiQ0YVY6EgJdReozAidiCCNs0jLJFBio82KWTk6LI74zRFJ50Ziv8SJDL8W7Z1Cmlp0-lsZk02Gw81mM5As9iDNl8PIbi6Gv8xevr68fn0C0etj75II5hW5-r3UORSfb4XMIFkg55A3khuR5kIuc4U1k5Lkm1wbnSw9UaQLs5G5YjqhLkyu56XpGK-SE_q3N8B8MoHhLq7F7Pq2J_55cT279pjOr7Obf795dyN-vbi6uri8mb2-Fm-u4KzLVzNyFX79JC4ufxM_zy5feULBdGCl7rKctIComsyqQmvDa6U6YixSK1aRqUAvdCAqGIllulZ5ArVEpvJYW8BByJDpRDrWRhp-9kA5ZjW8TW6Tv-gkiMpQibOgDNJhQUcCP5bZIChX590dZpWXhRmGag0q_loFJs0HtOnBFnWngpJ4-1kKv2wP79JG5RI0hn_ozK9-HN4apUu4Nzq8WAAICqg8vGrKLLJLHW1jabrbg8KEoVp0nukUAFAy7jxkyxZMb_jMIvJHjhRnmFwtfHUnY2IblHZ9nmu1EK9UDHcY6KnglIKc6ILDHhWFBoOLt7OC3a6TUK91WMpIpBlZh50Z6c8AJ5yYm-ECW5pMMPvyfgnSyTKqDhLq6KwIgOm5IgCBYQyYI1icLEEKWdZaknxM_rbXoIOURBCYbaaKRoAfkT2UuKHU4QxAUUSqhLXmlIeyMs9SRDeCKtoOxMzQNso8OjEKWOWwLVbphm0TwwlM3kkpEyM2yDLYE6a8o2Imo2WKSF_FtUjDjpesF2ZsgkJ8VtsCx6URmSyKdpBBAARnCMQZNomxbCgqGl1NJnMZi__ITNzADJUnsamyIGykcgJm58DPajsD1iFGVkJjB3uxWcEiYi2jUvlkVtg_QXwbTTkNAoDPZAKRebFD8D2deRRJWPkQVYicqfAh4beVDZBxZb5tbNIYgTd-0MlH4UAhriql2wZhE25WOlg5ABaoIFHUgd4-QdJ1rpYA5A2o8DdOdo5sjjTIPKwbU0d4n4rV_jF0eCfyZ1GkgWbHc5FTqEnE48sskjL2WQiib1KD8MOjOfxRSYec7MjvnyWT7lvXFjMbBBX3gXiDUDkE2RZQnUmZhxW1KiqOY1oaK261-mWRizIIUJ4WZQS21XYXUUYh2kjQM4JMImNFOPJE_ctBvPWkxmjrWQ0vpFLfX0bpXEa-L9apDqnzwGaA0rLuU5Q5hFHN_cZfFWI1hB5xpomiFmQecQ5VYzIp9B8IsRoJjzjWxBY58BEHEELPOr47uk12dEyWlJ5gsynwgGIVzsK7wZ04FvMoDT7bH8_sj1c6HtydUkrsyh2kZUKaT8WIukGKVKSHPhE9q5U6Ejsr5XBowehKydcwaQ_ohejTo37tjw8g_fGopsg0ORU5mrkyZY7a9cnkpfpEBDTXCCK-0HlhoHBs-6SlXquEA3Qjixa5GuIUfJ8WMiosITpDu2VEttqidqDJY2iLSlYHtIHDHjVGk0kmdb7rKuC1ocJP7ts6CXF87Cx7yiK9pB-tQDsYY2zPisS9_eI-yB_HU7HMdcie3Hcrb6QP8HqXhQQuG1XWwcTyARcUilgHF2HYb2PLqyBB08H9gRr6U5q3HL-Sa2ox0FJxgq_SvofvQa5ilRh2nc5BNkfXm6XoVJCC2XzUvqeJ-j-qrK2U-eiyhg4Uhvl6WXtySSOi2zaBb5aaJ2boA5m3dplvK1Yn9R7IrAcT4P-Qmx6RfWZNFHP0Fh3McV9bJRC0tzUOXBfX9Hi2rtI0ttE08JmaQ3WcOj40pP0ju8LqLBAZpFCVJYjffmY7bRKf3f5ds5_pdVPfA4U8F5fSZgbnEd7U6k_YQRUZlo2QOm3yD10zTCaWFPHuoKHT93lur_WSX2BwV74NtvMdq3ByXigETnh_WtFn5RVC3pdIH-OKRIxWP9_6aY6ZE0wjeYdadfr0RMZpBxEGw-mkT9isUFXSLENQBKkpBeFp85TLeP3UJcPXcWa2oohSQAXDPySn2RsWtZcH9D1f4zsmHDzUiYow21j4DyjUqvRR0FBSRiEFeKEiDMA4hCy-cnw4GcJJW5GoNQVlEJQ0xtHtCn1SWkJalpTrWP6AhiK6CRCKRCSk-5UIbOOpOBmzdlav_f02qdUn3G4nzWU7MwxtrqUqxqllrtpd3V43UDGp081UvBj9bTQaNcRfAieG50o3fB9odsVuN_JG957Yjb0xPgaDgdhpT98zDOx4Ppl0rhPOYJVzJxmz7tcJ4LR9qOLab20dcAD2j7z2eRtunhh1z3eZsnFrti7vPY6xQ8k-a_e4zbwyXBoDBnAl3XZpwHIuC3e9BCN_L6JUov2VJFedQRuP0KpvV6lbG7w4Pei9hvrULgZKR7VGYtim05GNZvQyoDDhAscT0G2vooaosEFkY-1kzM6mD9uaMShbaKuAyVcEVhWiOhW2pWquE3YVh282wvZkHS27h3Fz_yQaLOjuUDR9m06FCUAC9dOkDN7dY_lHYCJzP8vTOYx5xvmTnodqIcvI-CtZrPxFmQR0ZcKkQfu-cda_lIGXkjQ5STcJX27GpeEb0PxQr8K5CfUk3RT1DA5_cM-OHGgdVl11OBafVU65sPKdwzYXGS6N-Oa6Y7vUglIz33BHlLYGBuUa9qIhXPj8cCo-fBS-qzu-3-dF7ES1dCVZUKUV34vnR2JK04poGeQCyjHHAqimuzW6eKo736ZPetADH04KsMV5Z-Dqjyv99oKSa5dP8QcNnr_4x2l3D9c5u-xyehOJx-3DJ2J8hNhsnjChvVH47Oyspue19p6fn_cbBz1ioOz8HUqjf47EXkJ8IpEnTNBd5hZBf4ZdfVNClbl_NFgqg_6sPSUDQ0acnSERXnYvSaqjEyzRhja5D6OP9IgJoAxEXw7cb8crt7StK90nxi0dPxi1tFBput_3fw1nFUHvIG5Eu3I6ia6UwXi05g7G8DwIVaEdq0umUK0Wrenmv9EnEDE0h4iNulVomf8RFb8h0Cr6D0hYo1kFfAjd7_JtFN8nV6108ga_j-DXHVWrXokYy8_Kb78L6XdW-ODTeVsdaMpgqgAZtaZke7J24xDu2zDELrYWe59oeUDp9liMKdvybyb-ie5iZLSRNKbmpWrKO1pp1C477rHk4OOni35XUesLr2WK9nfw23ODd6gucG79qz3XGqdcnahYIZrPRud9t8tp0l4cV4vViFIHBIY3qw6Vn71EcG2vbr4TNzIHlfryOKfLL4rU9txGt7Cg2Tut7mecjCN7udLzevRmFUNv3rwv7iXrIBg_f1GOsZxmxr5M7p1AjmlwfDz-QZzIPFhNi9j_YSROTlCIDP6zr09OIhnP-Q1zpOctmkEQRHi4tq-D8QDOSz737r1qHVmhsw6L9-4_8r__AjWPYDc=))
- [Custom data types, key equality operators and hash functions](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/custom_type_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJytVwtv2zYQ_is3DdvkVpbtbEMLxw7gJS1mrHCGOG1R1IVCU7RNRCI1kbKTGf7vO5KSLT_apMAcIIl55PG7u-8eXHuKKcWlUF7389rjsdftBF5CxLwgc-Z1PVrExAs8JYucmu-tFxMBL-BSZo85ny80-LQBZ-2zThN__RbA6MPwajiAy-ubv69vBrfD61FoDthD7zhlQrEYChGzHPSCwSAjFP-UkgA-sNyggbOwDb7ZMPFK2cRrnFstj7KAlDyCkBoKxVANVzDjCQP2QFmmgQugMs0STgRlsOJ6Ya8q9Vg48KlUIqea4H6CJzL8NqvvBKK30M1noXXWbbVWq1VILOxQ5vNW4jar1rvh5ZvR-E0ToW-PvRcJuhdy9k_BczR8-ggkQ2SUTBFvQlYgcyDznKFMS4N8lXPNxTwAJWd6RXJm9cRc6ZxPC73nvAon2l_fgO4jAh03GMNwPPHgj8F4OA6sno_D2z-v39_Cx8HNzWB0O3wzhusbDNboamhChd_ewmD0Cf4ajq4CYOg6vIo9ZLmxAqFy41YWOx-OGduDMZMOlsoY5TNOoaIRzOWS5QLNgozlKXeEQ5Cx1ZPwlGui7dqRcfaq1kRMxI9c0KSIGfRoQWVLmSM0SkkW0mJxcbgjJq1ZIajRSpKLukwv8kLpVsyWeEO0ZFTLPFyc2sI1ywlKW1QWwkQlqlae2K9zIhS6I33iQCLnSIXktHCrJHTWtVrwXrG8GbMZFxjme_YI-jFDgmDoC6qB4imZRrgemXVYo-uQUvrXs0gDOa9_m54bjQBRtJBKRxH-U_ojOlTjN2C9ee7eSv9DA7pA1g-bAKb422rYnJ-yYkmSgp20w0pOWDLbs0Q9bclO0XNsqe3es2ZmrVHftsYpgwVRC8DAJibND-2ywrVDsb28qO6SmSOM3_AP40kxQfTPcN9w_2EBLAveGguMLnIB9yE5B4Psm-gMcbAgkeSrEM2VbschzqmUyTMwJgsVHPGxlOULdWiBucTeBJUlqCAk0O-b3aHj7tbp6Cqs3Vz4S8njxkTYk1ahqVSgdNztKv4vBhFEkUYZ4bmCPrxu_9Jut0u6oGvGTANLNZZ9xUx2s0QZCSmwEDt4LM30o8Vf7UCA_UO71s3O5vzkSUel7dn-McXKsyWiy5wRzUzxrsqG6UhcZIU2QWu5XLH2bO-z36Ipm2Pv6IMrHd1uSu7xgqMq5Dsf7-06qm29kooXfrsRuAOmnHa7WS5pQngauRhZA2wtRhGi6B34JTg29-KiRADw-UuNVr41hTd2TN6pXR-6m29OaMbVDVK_0ah5U1asJkiXzA0CnXY7QBaASqTGbqNMTzLdZs6XTLiw1Vy9JUYII6lttyuVUzMBcNyMvZdiLcHD90KujLqVmTmSBOOGuaeRdvZCVIopYVokhjeRJIYZoWWEX7d_CrcBNVD7pf27Hrd2C-xBI6RejeKBMckQ-2K9CSrnfu1TKqlovT4m-PfpsF5anyL7c_Tsl5pnw09QP8kjZOMU3d3rBPXCil6oJdTQhkBVMXCVAOktbcyNp3Eg25HA6bHVm5k4xdWKBWiivSuYYI6HLsZ-LQmDvYx8uatANWbeMAQfF1iK3XnXzHc57VaNa7BunUjZE4n93Sn91OebKb-XkLucfurzZM4fJno9oysL9-a2nulHF6bomjGexf4pd18xbaZOge6eAQbQxnrP8xhXAVMzweL8uc8JRVJWZ0RFhVJ3NWMCUXDndN6FMMR7bJu9q4XyM_9yB7FkSvyCDeIBB_YA7rbIUWra3Ywkit2FFb9KsfJreoI9ftQYFuz8EFr6-dZ5FueteSTZsjQjPIHYzFyGaKZdIRLMWje0GBO380FYHv6_kJTqBtviWLkfnzm7EwetFAMWbWWH6WCEcuYf3VYHwERsFk6QrxxIpjUOTg3l3IA5A3_vbrPLFl5MLw29Hr6wxgWl-DL6Ad5a4hhu2TKowgla652bmcXoKpWb4QNX8Dlt3qf4Ys13r25PLCntnP1edFAsM-2e5F4Tb-zTly87r6BJcrroqzR61YZmE0cd3bTtIGZxMyHp1L7TEz6t6aSUJri4dI9qXMB-KO69TVDJsaDuydE_3uaL_fkPoxeK0w==))
- [Key histogram](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/count_by_key_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVWQtPI0cS_it9PkVnL34AySYng60lQC5WchABmygCNGnPtO0W83BmejAO4r_fV9XTM21jlhwrsXY_qqrr8dXXzXOrUEWhs7RoDW-fWzpqDQ-6rVim81LOVWvYCstItrqtIivzkL4PPtyl4oM4zZbrXM8XRrTDjjjcP_y6h1_fdMXFr5OzyYk4vbz65fLq5GZyedGnDbzpZx2qtFCRKNNI5cIslDhZyhD_VTNd8avKyRpx2N8XbVpw16rm7lqdI5ayzkqRyLVIMyPKQkGMLsRMx0qop1AtjdCpCLNkGWuZhkqstFmwqkoOmyN-r4RkUyOxXmLHEt9m_kohTW06_SyMWQ4Hg9Vq1Zdsdj_L54PYLi4GP09Ozy-uz3swvd72OY3hXpGrP0ud4-DTtZBLWBbKKeyN5UpkuZDzXGHOZGT5KtdGp_OuKLKZWclcsZxIFybX09JsOM_ZifP7C-A-mcJxJ9dicn3XEt-fXE-uuyznt8nNj5efb8RvJ1dXJxc3k_NrcXmFYF2cTShU-PaDOLn4Xfw0uTjrCgXXQZV6WuZ0Cpiqya0qsj68VmrDjFlmzSqWKtQzHQqXRmKePao8xbHEUuWJtgkHIyOWE-tEG2l47NXhWNXgLr1L_6nTMC4jJY7DMswGBW0Jg0Qu-2G5GG-vmA6mcRY-2N8BfF-GqlroL4skBEUDabJEhxtzZpGXhRlE6hGGBI8qNFneX-xaEmdzBDTePWlymRbwTNJ_ZWMizZY5MCVSs1djOjUbYzpDsJVMNgbZiwXrGHyw2feJqyLMytQE03XwoNaBepIIIXnCrpjmWs3EmUrgfJhqFEJQUMiqUrDHF4WGipNfJgUHWaeRftRRKWORIaBV6GL9gFREyHIzmGEJPrMOEhNmqVFPhqRKa1Bvuu7BoEZAV-i-6rN8KVDSJpvnMhGUOQILiwZGJm-rl7A0ncfODkpZNiVEQUwVZR-FQpFt7mhhhqM9akl2svi7VpNaSJwZKsisl8oz4BOgR4kbwp3Kn1SCZHlUO5JAbFnmywzQgIqM130xMbSMYAsBVUh0rvlika3YRwmiyuIrK2VqxAoQhTVRxiucMhnPM8DEIqlNGmyE3QZ1wi4o2HlUa9bvhSB9wBaVkkwEIAxLCilr0OmyNKIAXClgp3dis5QUje-pmq71X0qcfj47EVxccPlfamPVf-VS3MBlLongSOdt-FPlJHtjw09qPTGI84TVa0NBhTdXC3hPPMq4VAGFgNII6WA0gSfcAj3DIWU1TW4I_JxqHIFlXpbmy0IRky25JeLz7TdBg_6fWOqtTu9FlRTiyh3EPyT2ZVCgw0WVgAXaTxxvpN62QLJ_quYIwA2k8CdGykos4MNWI4eRewQJ3paSlknAK0iIyQxqA0NTnN9tpQzgUxf-3qw0dnPJHntbBjUYYI2xwqwR9jDIPaOQlwAPQJP1XJMoXS6eVCaKwuV9q2LujTRBA4oFwTzOpjIOAvGY6WgDxdqUYFUgqK996celFpn93loX99qb723w0mzLh5279Jk2l4RH1htX3IPESKA5DYfe0LHT223cNiauI4KgWIACRHBC7SVv43B4A8dfI6sJsSkIQWG_HBEeCOHOExIoiTjLaEFOWD4Sc_x_ppP-E5KhVnvk79LR09Z5Rx4AfLDVP4meIGIPuYqOFPG3SnntTTu1kWEjsc-qUCsouTZpOq693hHP1u-DgcNx6hRcXK7SmNVVrYTS88DukCXW3BZxBl_qIkjViiTeQ1-VLn0rMEA1BNQZ2sQlhsOl1Pkz6b6FKfddcfDCZBM_egbzakm1aWzcTOdwKwPoBhRgoVv1-ux7e5XkF6FiIJEvkI-JUo1p09qBMp23N8a3MFeJSo09tdvGRyZEosSK5HBouQwdlhPr60NKLDtVWVOA7KrAIvL4mbzVGxcKSRK9HDmx5KuZMuEikFHUPnASEjS4fB1kOWgaVMTySUXOVS-VxxDMvZGfbTz_YrMCpyRyDqLqgUtRhiEY5qyM43WNLQI-t2hDnVWBcNuMq6QQntmjStoFK0WVH-ANaWQBbCMPLRXcTEOvmtp-AXX612XSfh09e1ZKCi_hxQj5XKfGzijY8n47ClyOvqK2C8QHSySHw1yugmVG1CEPQlmY9jbkuDhsi_Li-MoF78cVcePQQTEyUadtgmMHb4jDBXEhs5CGvUJcIJu1gbqdverzKWVrpzP-NwWnymid6qRMmnsRswmZhwu06dCUOXflIgm-229AFDIZglxSHzVTrGJzqrLuPFmataAUR1nlxD_oLoMispcx-pw_4jNIHwZ1qmLQPdsm-9QHHVUoiKeVcUStvFAxjMQmpO2i0sMOYD6VKmKsNavCbTWvaFUkjSRKxSdhSKablVBkIpNzZ0KFtRUNpVgfY8u43TuwIbHH3ZZgKU0tY3M_b3ESXOQ2CQKqZ6r8zm6hpVFTc4yR-Lj_r_19C-EQ9GPNKLlKfapgHVE4KKvpMjlkhwryQlTyBZmuIlDEOqqTyIJsa7drQ77a2tDhStzRte9aP_DltGHs3eY4CcqLjk63ioI5IDJjyxLYz7VBXlrCDkjcpYXOiOpCKqjC9O2TBa1zNbxxm-SgVg63NV93QOfZUyCF4WtNRcldtPri_LWvF7LYthu3iDV-of7tBaa2pL6XVkDjxhP5oAJuMCiswLFmm3_7ne7fX-ydq09I0O643f4M8922m7m9B-WpfBS0OTc0cBVlCkxIXxeERgY02TDYzobOkXjx8v0kBvqROyuM575SM4imG1l4ZDe_HTsH6uNt5tf2S-y0anUhPRhpINFUFtULDWroKzRJGYmZJIk7qoFmAztLjKn_sRE8sUyjMRqYRNygIOB8SLNVSikro0d6A-uKleIrMD2XUXJCiYzDkim7YxjORFtv0XBIQau5Ix2yVjESb_rcPzpdhMuQgLehbDsMpmYdqYL7gOePfu0Q2kzkhohaczV_9k16j6j7rnx3rdVUw_Lza4B--b9kMDA_7wLp9-W45EP54y5kMs7757-rP4YSmQfLPJuiQI-ZxdF4pGayjE0AwFgEsxL4obOURUP2SxPD_yiD4KVZ2kNC8atkUhp-usx3XX-5CYKNZatC_LFFtP9o3mochlZKALbslYbgP6icGrEX_8ASXHrsw6eKtG9pcGW3VUSW8lAyQ8Dhx2-PNtdYtsTT_DPyAGXP39wTBx2kezPCgvxr6XEzN7bxOT4-rsV3va3j8bjt7q874bC5gW7DS59YRLvjYcyVAskG6bCPbFRR9MoWxxYgEDvlcaDmSvFOWwIzogyp25Jnwu3-vW1Qu7dbquEE2EenN0XYiNoDBDC67eltvLEhyw37MLtQ4QPxz01MtNuqFwt65cE1LdyiHbWng5CFjLYdDlOJVXyhzXiozB1Q2UdLCkFlQfXyxk8wKteztccXiZXutszuqu1y3obcALTaZthOz2w7TOGei0HurousMEHgt1mPTVqV3iW3ary2ScILr8CeFtU9li4AW-5s3h3tAHVz7i4YNKgPcKZre_n7xx2EtI7cPbHSTBwTI61ui26NOlZ584eqVvoYhgeHH8sDTGdLY_-K1epB_ijc2zv4TvToSjHie4To9QAHBr_s02svlsmU_7QV66knMwzDGIOP9u9QGEAPSx9aL103D-jZmIcfWy_3_O9_9qthSw==))### `static_multimap`
`cuco::static_multimap` is a fixed-size hash table that supports storing equivalent keys. It uses double hashing by default and supports switching to linear probing. See the Doxygen documentation in `static_multimap.cuh` for more detailed information.
#### Examples:
- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_multimap/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJylVgtv2zYQ_isHDUXtVJYfaFDEjQN4bYoZK5whTlsUcaHQFG0TkUmNpOx6hv_77ijJlpsM67AWiCHe-7vvjtwFVlgrtbJB_34XyCTod8MgZWqRs4UI-gHPExaEgdW54fTdPpsqOIN3OtsauVg6aPAm9Dq9bgv_vA5h_Hn0fjSEdze3f9zcDu9GN-OIDLzRR8mFsiKBXCXCgFsKGGaM408pCeGzMJQN9KIONEhhGpSyadB8671sdQ4rtgWlHeRWoBtpYS5TAeI7F5kDqYDrVZZKpriAjXRLH6r049OBr6UTPXMM9RlaZPg1r2sCc4fU6d_Suazfbm82m4j5tCNtFu20ULbtj6N31-PJdQtTP5h9UinCC0b8mUuDhc-2wDLMjLMZ5puyDWgDbGEEypymzDdGOqkWIVg9dxtmhPeTSOuMnOXuBLwqT6y_roDwMYXADScwmkwD-HU4GU1C7-fL6O63m0938GV4ezsc342uJ3Bzi80avx9Rq_DrAwzHX-H30fh9CAKhw1Die2aoCkxVEqwiKTCcCHGSxlwXadlMcDmXHCoawUKvhVFYFmTCrGRBOEwy8X5SuZKOOX_2pDgfqj1VU_WLVDzNEwGXPOe6bcmEx6s8dXLFsojny6tTNbc0uXXtRKzRVbwW3GkTkdITFemEYShtc50rgj-uTp7Xt9hPgeR6XuoMUxbBWEU_ZuQrtf5QKocElKqx1jJpTtUO60Q6E0aPYhu7bSaQcgOkhHt7FK1ZmotCWIlIeLAQq8xtY_q0ggoRqWfuAFpd76VmX6gWBwflUpFUObbDUevBuqTft_IvNIQxqpx3XnY6nVKt3cZdgJom5w5bClU_irnrdjoh6oJNNUqLGlpd6rz_sb7TPhOqoe2zKb1WOdkIxtoVTOM0dxKVkfF8qVEFHpXekNcNTXqaIihWGIc5-rjo1IalQ6InzkWqWQJzRmSgeT_vvIh8ucgprPKUVJcVsGENuSvsW-bbBQjHGfTC0vgA_u5pG_anSt7b7rkW7PclsAWZ-v0T-l4WTjImzfO5XQHJbGPcrPXHCIYAMqhoS3V7tQiuBS4yggmW1I2NxuIcrjYblcbX0SIKYbdDPLGGXTfs4k8URYAnvXMiQnEM_qMU7usFHMahUWBWna_Yo4ifDNwlsvqq0WmGP69clEIEbTQru-JsJhY4YdXZ_TeI4xLOuMFyWrhN2OF2drlR8G_Q7iS8gMYY2tBrhiD3b2FfA3nkeYcTgBz0wWk8tWct0oWUaEkV7GycZlcmK1SC-R89TurdMnomPJsJdyC4iy68vnh5cXGx_2fCVKVceevY6XguMZDnx9GmYkajrnRM8OTU5xlCp84wakwxzJrz3BjyZSlxnzJea_eYdbE3mrRZ6NLFmwoFHqBqh5fu7vDsIdZ4mZkHsPl8Lr-jaoK3phMUhbkfQlEkhg8C1fLspfXQ9c58k_0mA3SX5S4mmuAO8zcGZV2E-em6m_9zOpMYr1Is1zZq-dSQ_ICRChI9bfbe702LgRAFZq3mktF9f9icdeI9HCI9VAwljGjSH-pl3ctvD5BoYdVLhzc9PiPCmi1KIysQwAQGg2evjIcDzGVBgnQ9vjhXRoq1-I8Qh0eQKrWCrD7KwWnZyFrU1lPDI7DEKacdS0Hlq5nwu9_nVS08sEudp_hEQ-6N4RX4QS-qs35o8b3ZOCHR4MdkBnAwPBClXC50XeKU4kuanqb4WDXHB3eg1px3e-d5F8U6c8VrPGjhvTvgr15130CLGb4c2FX8pgOtFl7KDv84rFkkrZStZv6JnspZzSfnPMXDdfGexgO8odVjsA8rOVL1RI5MDvbf_P-_AYKkJA4=))### `static_multiset`
`cuco::static_multiset` is a fixed-size container that supports storing equivalent keys. It uses double hashing by default and supports switching to linear probing. See the Doxygen documentation in `static_multiset.cuh` for more detailed information.
#### Examples:
- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_multiset/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVVw1vGkcQ_SuTqypDcnxZjSIRuyq1HRU1wpFxEkUhwsveACvf3dLdPQi1_N87s3sHhz_a1JZsuJ19--bNzFu4iyxaq3Ruo_7Xu0glUb8XR6nIF4VYYNSPZJGIKI6sLozk952XkxxewplebY1aLB00ZBOOu8e_xDD6NDwfDuDs8urD5dXgeng5anOsj3-vJOYWEyjyBA24JcJgJST9K1di-ISGicBxuwsNDphE5dokar71KFtdQCa2kGsHhUWCURbmKkXA7xJXDlQOUmerVIlcImyUW_qjShxPB76UIHrmBMUL2rGid_N6JAi3o84_S-dW_U5ns9m0hafd1mbRSUOw7bwfnl2Mxhctor7b9jFPSVkw-FehDCU-24JYETMpZsQ3FRvQBsTCIK05zcw3RjmVL2Kweu42wqDHSZR1Rs0KdyBexZPyrweQfCIn4QZjGI4nEfw-GA_Hscf5PLz-4_LjNXweXF0NRtfDizFcXlGxRudDLhW9eweD0Rf4czg6jwFJOjoKv68MZ0FUFcuKSdBwjHhAY64DLbtCqeZKQtVBsNBrNDmlBSs0mQq9RiQTj5OqTDnh_LNHyfmjOpN8kv-kcpkWCcKJLKTuWN4ip1mROmXRtWWx_PUwzC1NYV0nwTVBTdconTZtDnoUMi9yyeeL9On1VC-oZM8sWiouUqe1H56vNNUERXawySdrfWTnZWiS33zzLil6OivS2yl-FyQzUkZheWYUzuEcMxLIGeGQZLIsa9muD5SgyjMMFZ4hYfBhaPcjeE3xvOofA7UXdUu6pcZb69CTc6Mzj-o3U4l8UMFTy_VNNFdRUxnLgqXqFuFGUaWMu6EW8afcGKRuxDXe-GaEHTVifIvbPR8qrModTaLKG2utkuYkv6PndB4fQ6FTt10hnBJB95Y1A-h04CJbuS3YVLuQgkFuUMxdmDB-bdb0ehLxQ5VjSmKsRVqgbbMC1KvhHdilLlLaRCJiSg1Cm2whl-U5bikca0FeQ7kY0FIWhoeULIj_rwoHiXCC09mTlVwmnhlA5jnlhYoHZdLq7RMZFdmMcYMq7ADEJGiJPBtU2qTft-pvnLoabl5kU7_hFF53j7rd7h7xjIyPTAAkO5QilWbClpZAsT9DqgUVUvAo8A5R0Jl7YF6dhlXC7rZfv32SxB79NCxKVGljx6pTx2nWuXH_FpKrBtwN3ppJ4hQFgd5UqDdlaUMTtHogrO9IL2dQqtLTK892QAQPp-Ckqsevu-67qw6Iyy27-tw9rtT9fY04TTFpyqTDqO8qdteNoRfDcQztdgzqvtzwGY8Mux7z97bOFQWkO4O3gduQIZHBw6Ycv5z9_6gm4PGRd3RyDbcbGAh-0-8fGFotTw6sV-HYX5i7bRX5hgec4YJmrhkHeMwTft2tVWvoSVOp0jTkSiOogzMIu-T6ceDOfkOOz2IHKjvY4FsiQ6i5Al2E5AN88wWp6gpUkxpGMAhIg8gwFYX_S2fXlUXuQoN5cMMaWeaUCSeXpQ9Z7nz-qECFenBu-5kZYVxMprpwNJFTXqNx2V9XvPwj_MZUZDZ7dl9yNtr_I71Qnroyeoa28QSXw974DxivxPM4JdOr0vR9yxyId2g18PWA3ZQyjmH6DU45rFbD6hL5l4Y9ANqHHNKunjefcbPqnIe1esQSWk8fWEqg5tBoPAN2-lQ_NP39-vyWapabTbgL2gS3pTA4OaHrbVxI6lX7At4ReLIb1faECEU-23vAlK67p7e_Eyp9AWOdofOl2pD30QdQnS_qCCE5IlmYHPiquaevAvwBmz61mP03hihfS9k7fl30aFmvXPg6EbXozFP56lXvDbSEkctTm03fdKHVogvH0R9HumLSSkU2898xUjWrYUopU3q4Dt8K6AHdH_ltdB9X6-TjB-vUyNH9N__7D2OnfWU=))### `dynamic_map`
`cuco::dynamic_map` links together multiple `cuco::static_map`s to provide a hash table that can grow as key-value pairs are inserted. It currently only provides host-bulk APIs. See the Doxygen documentation in `dynamic_map.cuh` for more detailed information.
#### Examples:
- [Host-bulk APIs (TODO)]()### `hyperloglog`
`cuco::hyperloglog` implements the well-established [HyperLogLog++ algorithm](https://static.googleusercontent.com/media/research.google.com/de//pubs/archive/40671.pdf) for approximating the count of distinct items in a multiset/stream.
#### Examples:
- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/hyperloglog/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyNVm1v4kYQ_isj9wvkwAbaKi2XRCUvvVp3IqfAXXQqFVl2B1jFXrv7Akmj_PfOrjExTVrVoES7M_vMM8_MLH6KDBojC2Wi4e9PkRTRsN-JMqZWjq0wGkbcCRZ1IlM4zf06OZopOIKLonzUcrW20OJtGPQGP3Rg_DW9TEdwcX3z-fpmNE2vx7H3Df6fJEdlUIBTAjXYNcKoZJz-7Swd-IraE4FB3IOWd5hFO9ssar8PKI-Fg5w9giosOIMEIw0sZYaADxxLC1IBL_Iyk0xxhK206xBqhxPowLcdSLGwjPwZnShptWx6ArN76v5ZW1sOk2S73cYs0I4LvUqyytkkn9KLq_HkqkvU98e-qIyUBY1_Oqkp8cUjsJKYcbYgvhnbQqGBrTSSzRae-VZLK9WqA6ZY2i3TGHCENFbLhbMH4tU8Kf-mA8nHFAk3mkA6mUVwPpqkk07AuU2nv11_mcLt6OZmNJ6mVxO4vqFijS9TXypa_Qqj8Tf4mI4vO4AkHYXCh1L7LIiq9LKiqDScIB7QWBYVLVMil0vJoe4gWBUb1IrSghJ1LqteI5Ii4GQyl5bZsPcquRAqmanvpOKZEwgn3PEiWT8SUlas6Btztz6bqaaLXWtnbCJwQyDzDXJb6Ng7vXIxVBmkNon_CcFzZg9PcGOFwOXBnixIdmR5OJwcVUX_JTTjmkzzhcvu5_jASDYknpV5oSUu4RJzSthqZpHSNl4mar87n91w2EjvjirpYaiQHhJGn1NTiyKVpS6WqrUppGjP1BPtE5YXegr_9pxSm1k_StTzRMBXFyi14dDIv3BuQbl8Li3mhjz7Lsvg5AQGP70HSBLofzj3mQJU8g2HBxKfTM8gnGztMfzMen86-wEV-mzhbm-9C31LatrqXBO5rkwrWOIFrijPdqdyjFEJv-g18G8RqDxSVU0p0ISJM5bajGkBnmlosnrKaRB18SDzahO1LvQOqRf3-oNB_-djP1kV2JK5zMKGZQ5935J0mmaiLJQwfnAZfD_4eA7mHi1fgxfSQzFHpiAyGEFqVrWtGc33jJ72AZ9f0kkVXQQsI6hAAUknolpxfNUkXvm9x5MRDZyREMCoilVJidArtP0iZkL8h9ztA1DfZGHaWY47cLbyd-lWUjR_ObPlktoiOJFWpN__DLZbwrtGKyYwaIS_YBl3me8lD85JTKlIKvtYwwf5m01dVaG2innzzGmDVO3RqqMFEF4468dgFk21Owg4pD1v2TP1Z16ecGY2U1d14LfOvs1qf9Q3pnd9hRyosYVpHVrCY_yFygnQ2BNROPq1OWu9GadN0r7l_DLB0IV-3Gu_HZ4aI9sppdE6raBHy2d6WfA_wXQP6pd3ikhtOO8PfnR9MhelrV44oi4BnfJ37_rH0GWar09NPj_uQbdLN5OlP5ZioOhmLF-Et5BMLhqYnPOMNjfVewNtWO3UffTcqe00Kgd2mrro-Y_w-Rvi8QMW))
- [Device-ref APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/hyperloglog/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydWY9z2jgW_ld03OyNSQkkudvZGxIyR5tul9le0gl0OztlxwhbgCbG4iQ5hHbyv9_3JAtsAp3u0kyJ7aen9-N733tyvjaMMEaq3DS6n782ZNronrcaGc_nBZ-LRreRFClvtBpGFTqh687JOGcn7I1abbScLyyLkia7OLv4V4vd_ja4GfTZm7v7D3f3_dHg7rZNsk7-vUxEbkTKijwVmtmFYP0VT_BVPmmx34QmQ9hF-4xFJDBulM_Gjeal07JRBVvyDcuVZYURUCMNm8lMMPGUiJVlMmeJWq4yyfNEsLW0C7dVqceZw34vlaip5ZDnWLHC1awqybjdmk6fhbWrbqezXq_b3JndVnreybyw6bwfvHl7O3x7CtO3yz7mGSLLtPhfITUcn24YX8GyhE9hb8bXTGnG51rgmVVk-VpLK_N5ixk1s2uuhdOTSmO1nBa2FrxgJ_yvCiB8PEfg-kM2GI4b7HV_OBi2nJ5Pg9Evdx9H7FP__r5_Oxq8HbK7eyTr9mZAqcLVz6x_-zv7dXB702ICocNW4mmlyQuYKimsIvUxHApRM2OmvFlmJRI5kwkLCGJz9Sh0DrfYSuil9FiDkanTk8mltNy6ey-cc1t1xvnfZZ5kRSrYVVIkqrPYQFOm5vhpJ8XiepzXRVLeMTbtJPgvFbPr6kO70IWxnVQ8Yof4USRW6fbikIhB2gQw1N7XLxWiLfjS3e6c-Fz_x2GwVKvFLBZPHOESsM8_n2opZuxGLOGo1dwKuGsoPIDdhLzqdituTUpVp0Ziy_6HgdkV0oggX6qHWEXhQq1d9HKVn6q1CzlMEZrcYBbaD-xExk6c3gS4mQqqKg9H0r8UuaX6QEDUkj0gjyLDFtyyGeSM2y3hOpU5z6TdMGGsXLpsMmPFytcfzzduA-UAtVb6IVM89WpgOdARVMl8VViWcstD5se5FTAE7iGxGQcQ78VsBPNbzF8OaMnAIhlxDH-mPItj9qhk6ixMY29zVK6ieLTCGvCGNhbFZtNu18gvIrYsb47zr9ibdTpspHlugOuls20vkpFzzWeJGRCIaFLU-L6cE5tmKnnwUqS7MJQa3IOxhBUn2HPyOV-K4GK3S4tjt8yhutsFNgVP_a3Yab2-pCA5e4cLTjSzBCT0Bl4pTfgKhemkT92mIU1K00rxZBEjFsfGrUf4_F4uLNMNIu8tNQ_CJovPf-w2HC1IfZapNfkDToSTwKZaEQCwDdxMPEtMOTFqmnoqmbF0A0dBEqZmMtaCMhB1C0os90BMl0JYpwUYm-cOkiWn0u_GCVJpMF5AOqF6qIj26Alj50WWsaurqm-JKnKr4y9Cq0gLiV01uM7GCTf2ykkUuLmCiL2OqjFoumbEAD-hbbTb6rq3l1Rs5BbEW5moXOuxXTM5U2oVE5GnBIY5vm_ksv2EwnGpcxeX2zUyfWL1T68iFxYN0idcvGIeN-7qcm9bj82gIoERAmwiH0U816pYGQKdNHGJPCcdNXcYeIPb1id5D1u75msOAZPW75XA9jKqZMmseP61Gv0WlVi7DCzh00TN54pFgxxNFAH_ctCq2rbtJBNcR84pnxf3a9ts8mTr5HpB1B5RwK_AD-yrB9QuhP9gEiSF4J1EjlEQbwiH5c6mfpoyganBS2LhEcuqtqFcIhKvKDrx37-AYNhaOMaGFKYFkEbJ0Xv0yh9q1DohhZN2UEgFDLhxqjwnf4TLy9bgGHXL6Yf43Kutk7qjczZ0XDCpuTdxinWBDTJFw5yPy_DufRjGbu77_wV55OlaphaZh9NzEXbB89JGmhSJ52aYpTDz-IwBx0TeRE3eUpoLizBr0FCyM89rDEXJXHW96lVL0qHj-QhEkOFPZToyo8qNDsBP0HjmNnV9o1xa4wAKz1a6wiftcLOKVjlj_rJdlie4E9XJej12tgVqSdR7hpiFKrKUBlKtntytbEM5nuTFMiaUmElnsiWhyVbVSoMTZ9G48TZoosB7EvkhhcU_ZFkxRlgarQoFtfY8a4ZwbmvWpzNPXY6XQs_FAerYcQuM8GDxPb_KOguJOpuDwGjCIplyjxkBG9xhiswhiILqNvIhbO1iTdY912ePam9u7Tp1OUlU7twV9thAUk6HIQZhNPEjWclnbgx5mLL6ZcuH_zs-YbSR-fevCaPP968ITjJV2DAw_cUx4kUn-gs9SOXALqdxY56Vg06oQVOjiXrNON2xxKHjKWqiTdaqBnnegWq_H0X1fgTZbQJ9Q6qnr9nccfhW58vec5BamKuvCHhnMrT4erVf4gEaE329CgJUxF4IzXHrU3V36i4nUEvNqhn2fz5oBt1ClMuGUyU3X1KHyY1OeKgxW-i8nJ-p8ALHL3CI2u-jrMJ7O0Nf8l5J0d_mPnYCbO4UiUvv3HNZ2RTPJQ7_EVVmgLCfy0dHYd8j2rncSW6N9ONLTfLFQetqdO2WOlfpVF0_dwTWxdIwql78-9IF_vzd671K2SOLsOc_L-JfX5cB8qfYbrd20oUNbgIx0Xa_Shm9EzmVXa0HuHcLaN3Wr6tqDgdkN6SY9lTMEc5mywu2QeV0cXZ8MKsfQuqh3FXeXiXttNFIxREoH7USVod1bkepw1ZWp1meJUUWBtoD0xAwr5U_EE6L7IGVTKWcgmpC64hO44qu2K08iPGqKUQPdacw6MHuMI1pQeNY3VHPKRUtt8VyikHn6JHL0dXuFRXCSOM5ipe9GfXL06JPwWEI-vVVX-qDeS20mY9q7WUCscSKDvL8yGuLvcSGG-8-fCTF1UP-1dXV-VmL_Xh-0aqZd319He3so-PFNv9bOByqhz8DhppTfwYL5cJvouFwLVd2uN6fLaJzT9yHR47dNFMvu243HMWOv2649uxLsT4S6r3R5WikW_vWBZng9veGsOw3vX19n8_CkEG94tvh732rVP27ymoDPWLBt7Rsu3B492CJ48eNYZEkwpi_AW4vAYay0O6IlluJUsTZBmucAjBXVh2iy0575kfXRqtBfRrHIL17rd_IH5Pk_OLH4hyP_UsaPGycQl8vefXq_Cd2ynWy6Jll_NMZOz1Fk7KnNNZhQkpPM76cuj8EZHJa0ZkkSYabj_7VPW5YnOceGs-t8Bx9sPYcsWo8_-H-_R_hsm5I))### `bloom_filter`
`cuco::bloom_filter` implements a Blocked Bloom Filter for approximate set membership queries.
#### Examples:
- [Host-bulk APIs (Default fingerprinting policy)](https://github.com/NVIDIA/cuCollections/blob/dev/examples/bloom_filter/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydVmtvGjkU_StXsx8WmuEVbVUJQiSapLtoK5IF2qpaVsjj8TBWBnvqBwRF-e977ZmBgZBqtVRqwL6Pc889vvZzoJnWXAod9P9-Dngc9HthkBGxsmTFgn5AbUyCMNDSKup-d94tBLyDG5nvFF-lBhq0CZfdy99CmHwd345HcHM_fbifjubj-0nb2Xr7z5wyoVkMVsRMgUkZjHJC8U-5E8JXphwQuGx3oeEMFkG5twiaAx9lJy2syQ6ENGA1wzBcQ8IzBuyJstwAF0DlOs84EZTBlpvUpyrjeDjwvQwiI0PQnqBHjr-SuiUQs4fuPqkxeb_T2W63beJht6VadbLCWHc-j2_uJrO7FkLfu30RGTILiv2wXGHh0Q5IjsgoiRBvRrYgFZCVYrhnpEO-VdxwsQpBy8RsiWI-Tsy1UTyy5oi8CifWXzdA-ohA4kYzGM8WAXwczcaz0Mf5Np7_cf9lDt9G0-loMh_fzeB-is2a3I5dq_DXJxhNvsOf48ltCAypw1TsKVeuCoTKHa0sLjicMXYEI5EFLJ0zyhNOoVIQrOSGKYFlQc7UmhdaQ5Cxj5PxNTfE-LVXxflUnYVYiF-4oJmNGVxRS2UnyqRcL7Hvhqk2ten1sY1JldWmQ6UVpu02X23FbIMplhtGjVTnTdgTo9YBW-YSm7Y7b6Wxuwyl1j7FwCU2hZG1X-bCoOK4aGwkj5sL8YyFgVukWLdxHIOw6-Uj22kntiH0ur92u90B7D-dTucKfmeCKWJYuQ3O_nwkkxduw0Pcd9Btvx-UkcbIrjKe64QrbSAlWeLjuWCy3PD0vpFAvErQKjMPXntoG5Xd0uhx6SvzOPCr22xVmygR8M0tszvynKmDBmaXF0I7tgCcBE5eaLL0JkOXfbB3neVk60553auYDDFLiM0MFA12mjwF5Kt3kuv365q7qnJdl_GeaxW-lKm1ift91KCBqys8kR9t9ojAPO-e47fxJFgOU7lyJK6Knru5WMDsY6yFgNoHw_tcTMRZmbtQZ79_pPMaatewRtU5P1v3LpWiG26rHbEVyrYZeo82ZnDfe80yDbFOK_nSWyHvdZdB3QAdvVj2thd1sRRWYh-mcDjaqgIcYBwafF7M5Tz3Ds6wlDOJ40aFIiwzNX_KWiRldu0scRBidxoF8BASkml2zN1ZR1F3PDoptRhlKX9Zpna107efqziFN1xane1KDeGs35eGjnN3EepU2iyGIh34q80oy1q51HixbBj44YHEzB-mw16dFTyq7i7Ur6gJD4VXjf0vcH2ZJiUG8Bbzt7W7RpjwqE6Gizui3N3W9QOhvWOuZEQyvN7wQomJIahzZamxGCushSmjsKeUR9yga8HrSd2fHqbXXTxjOZbl5oUskGArIkSOrHhfXtVWq8oNhmPTlOiUafcEif3MwnrP0yn2dIqSTvEGnUkmkS7HtgM7LI64X2xU8vIXWuNYbGcaVF8qT6yTQbMJnTJgIb9Cu0Xe5H_kPa2kvvSTvKJ5fkA6UeKLBb9XJPhl17dyPTmsnw48xVAVArr48wVfq-4NiK9CdXjUBmJDae_yve3htsxN8eINWhhoSC8ueh-gRRRNh3q9_NCFVgvvLYP_GczB4lZG1pF_Bmc8qsWklGa4uCkerriA9YrH4CWs9vHmONpH7oKXf_y_fwHeCexw))