Comments (5)
Note that you can somewhat already do this:
dest.clear();
dest.extend(src.iter().map(|(k, v)| (k.clone(), v.clone())));
This should avoid any unnecessary allocations in most cases.
from hashbrown.
I thought that copying the underlying buffer would be more efficient especially since my keys are very small (i64). Do you think that implementing clone_from
makes sense for a HashMap at all? I feel that not being able to copy the underlying buffer wastes one of the main advantages of the Swiss Table.
from hashbrown.
Copying the buffer only works if both tables have the exact same allocation size. We could resize the destination table to match the source table, but that feels wasteful when the destination table is larger than the source.
from hashbrown.
Okay I didn't think about that one. I think that an implementation of clone_from
can be a best effort approach to avoid unnecessary allocations.
- If it is possible to copy the buffer, great.
- Else if the destination table is larger, erase and insert.
- Else fallback to
*self = source.clone()
.
from hashbrown.
I am in similar situation, I have two hashmaps A and B, A gets inserts and removals, and every once in a while A is cloned into B. So B is usually fairly similar to A.
For now I'm using an immutable hashmap (from im
) where clone() is cheap, but that has its own costs of additional overhead for inserts and removals.
from hashbrown.
Related Issues (20)
- Support fallible eq and hasher in raw API HOT 8
- ahash shouldn't be the default Hasher HOT 3
- UB on aarch64_be-unknown-linux-gnu_ilp32 HOT 1
- latest/recent rev appears to break ahash/compile-time-rng usage HOT 2
- Why the identity function can be used as unlikely function? HOT 3
- `hashbrown` fails to compile as a transitive dependency HOT 2
- allocator-api2 default-feature? HOT 2
- Compiling hashbrown 0.14.2 for aarch64-unknown-linux-gnu with "target-cpu=cortex-a53" generates illegal instructions HOT 2
- Switching to GxHash? HOT 9
- Feature: increase capacity according to the actual size returned by the allocator HOT 2
- Hashbrown crash due to bad malloc HOT 1
- 0.14.3 - no method named `clear` found for struct `HashMap` in the current scope HOT 5
- Benchmark biaised due to no fence around input
- assertion failed: buckets.is_power_of_two() HOT 8
- Build breaks on nightly due to use of `stdsimd` rust feature in ahash 0.8.6 HOT 2
- Was swap-remove behavior ever considered when removing entries? HOT 10
- Consider returning to 1.63.0 MSRV HOT 1
- How to calculate the size of the hashbrown::HashMap at runtime? HOT 1
- LLVM failed to use the knowledge from a never-overflow assumption HOT 13
- Library test `map::test_map::test_clone_from_memory_leaks` errors with using uninitialized data under valgrind and miri
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hashbrown.