如何在一行中增加或减少现有字典键的数值
在Java中,在将元素添加到HashMap>的同时,可以增加或减少数值.有什么方法可以在C#Dictionary? 中 例如在Java中: hashMap.put(key, hashMap.getOrDefault(key, 0) +1); 在C#中: if (dictionary.ContainsKey(key)) dictionary[key]++; else dictionary.Add(key, 1); 解决方案 在.net 6中,不仅可以在一行中进行,而且只有一个HashCode查找: : CollectionsMarshal.GetValueRefOrAddDefault(dictionary, key, out _)++; The System.Runtime.InteropServices.CollectionsMarshal.GetValueRefOrAddDefault方法: 在指定字典中获取对TValue的引用,如果不存在
6 2024-04-25
编程技术问答社区
C#相当于C++的map<string,double>。
我想为不同的帐户保留一些总计.在C ++中,我会这样使用STL: map accounts; // Add some amounts to some accounts. accounts["Fred"] += 4.56; accounts["George"] += 1.00; accounts["Fred"] += 1.00; cout (); // Initialise to zero... accounts["Fred"] = 0; accounts["George"] = 0; accounts["Fred"] = 0; // Add cash. accounts["Fred
6 2024-04-14
编程技术问答社区
C# Java HashMap等同于
从Java世界中进入C#一个,是否有hashmap等效的?如果不是,您会推荐什么? 解决方案 a>可能是最接近的. System.Collections.Generic.Dictionary实现 System.Collections.Generic.IDictionary System.Collections.Generic.IDictionary System.Collections.Generic.IDictionary 接口(类似于Java的Map接口). 您应该意识到的一些显着差异: 添加/获取物品 Java的Hashmap具有用于设置/获取项目的put和get myMap.put(key, value) MyObject value = myMap.get(key) C#的字典使用[]索引设置/获取项目 myDictionary[key] = value MyObject value = myDictionary[key] null钥匙
10 2024-04-11
编程技术问答社区
如何在C语言中正确地将结构化数组hashmap中的项目进行malloc?
在以下代码中,我正在使用malloc将新项目添加到哈希姆普.我以为我已经检查了所有盒子,以正确使用malloc,但瓦尔格林德说我的内存泄漏了.有人可以把我指向我出了什么问题吗? #include #include typedef struct node { char content[46]; struct node* next; } node; typedef node* hashmap_t; int main (int argc, char *argv[]) { hashmap_t hashtable[1000]; node *n = malloc(sizeof(node)); if(n == NULL) return 0; hashmap_t new_node = n; new_node->next = malloc(sizeof(node)); if(ne
10 2024-04-10
编程技术问答社区
哈希函数问题-添加功能
我尝试将功能添加到DJB2哈希功能中,但似乎不喜欢更改.具体来说,我正在尝试包括一个将单词(字符串)转换为较低情况的循环.它引发了以下两个错误: 从int> 分配给指针转换的不兼容整数 无法递增类型char *[45] 的值 请注意,在原始代码*str++中出现在while循环中.这是我的第一张桌子桌子,我对指针的摇摆不定.任何对我出错的地方的见解都将不胜感激. // djb2 by Dan Bernstein -- slightly modified; unsigned int hash_function(const char* str) { unsigned int hash = 5381; int c; char* string[45]; for (int i = 0; str[i] != '\0'; i++) { string[i] = (tolower(str[i])); } wh
8 2024-04-09
编程技术问答社区
C 词典/地图
我想映射结构成员,以便我可以消除循环中的分支.在C中实施此操作的最佳方法或约定是什么?我想这可能是一个2维数组...然后我可以将整数映射到char键? char chunk[32]; int n; int i; char *ptr = config; while (*ptr != '\0') { int items_read = sscanf(ptr, "%31[^;]%n", chunk, &n); if(chunk[0] == 'S' && chunk[1] == 'P') { for(i=0;i
10 2024-04-09
编程技术问答社区
如何选择哈希表的大小?
假设我有200.000个单词,并且我将使用hash*33 + word[i]作为哈希函数,对于最低内存/寻呼问题,表的大小应该是什么? ? 使用的平台-C(C99版), 单词是英语字符单词,ascii value 哈希表的一次初始化(链接列表样式的存储桶), 用于搜索下一步,例如字典搜索. 碰撞后,将在新节点中添加该单词. 解决方案 一个好的经验法则是将负载因子保持在75%或更少(有些人会说70%)以保持(非常接近)O(1)查找. 假设您具有良好的哈希功能. 基于此,您将需要至少约266,700桶(75%),即70%的285,700桶.那是没有碰撞的. 也就是说,您最好的选择是在各种哈希表尺寸上使用一些示例数据进行测试,并查看您遇到的碰撞. 您可能还会考虑比hash*33 + word[i]更好的哈希功能. jenkins hash ,其变体需要更多的计算对于更少的碰撞和较小的桌子尺寸. 您也可以将记忆置于问题上.桌子尺寸为
10 2024-04-08
编程技术问答社区
如何通过JNI从Java向C语言发送HashMap
我有一个Object具有HashMap字段.当将Object传递给C时,如何访问该字段? Object's Class具有以下字段: private String hello; private Map params = new HashMap(); 解决方案 您的问题的答案确实归结为为什么要将Map传递给C,而不是在Java中迭代您的Map并将内容传递给C但是,我要问谁?为什么? 您询问如何访问HashMap(在您提供的代码中,Map)字段?通过容器Object在Java中编写一个登录方法,并从C调用该登录方法.以下是一些单键样本代码,显示了如何将Map从java传递到c,以及如何访问Map的size()方法.从中,您应该能够推断如何调用其他方法. 容器对象: public class Container { private String hello; private M
6 2024-04-07
编程技术问答社区
相当于C++ STL的C语言
可能的重复: c? 中的标准数据结构库 C是否具有类似于C ++ STL的数据结构实现?特别是关联容器,哈希地图或任何其他具有大约恒定时间检索的结构? 谢谢! 解决方案 c 不能具有STL的"确切等效",因为C没有模板或类. 您可能对" Glib Collections"库感兴趣: -glib/ gnome glib: p> gnu gnulib: http://wwwwwww.gnu.org.org/software/gnulib/ p> 其他解决方案 glib 确实包括GHashTable s这基本上是密钥和值之间的关联 - c ++中的hashmap是什么. 重要的区别在于,您必须使用void*来存储任意数据,因为C不支持模板或通用.不利的一面是编译器无法检查您的代码的有效性,并且您必须自己确保正确性. 其他解决方案 您可以实际上在C中实现自己的位置.建立一个结构,给它指向其父母的指针,并实现一个函数,该功能将指针返
16 2024-04-07
编程技术问答社区
超高性能的C/C++哈希图(表,字典)。
我需要将原始密钥(int,也许很长)映射到在高性能哈希地图数据结构中构造值. 我的程序将有几百个此类地图,每张地图通常最多有几千个条目.但是,这些地图将不断"令人耳目一新"或"搅动".想象一下处理数百万add和delete消息. C或C ++中哪些库具有适合此用例的数据结构?或者,您如何建议自己建立自己的?谢谢! 解决方案 我建议您尝试 google sparsehash (或C11版本 google sparsehash-c11 ),看看它是否适合您的需求.它们具有内存有效的实现,并且对速度进行了优化. 我很久以前就进行了基准测试,它是速度上最好的实现(但是有缺点). . 其他解决方案 C或C ++中哪些库具有适合此用例的数据结构?或者,您如何建议自己建立自己的?谢谢! 查看lgpl'd Judy Arrays .从来没有用过自己,但几次被广告给我. 您也可以尝试基准基准的STL容器(std :: hash_map等).根据平台/实现和源代
12 2024-04-06
编程技术问答社区
用C语言实现HashMap
如何从c ++ stl中存在的C中从头开始创建hashmap? 将考虑哪些参数以及如何测试hashmap?就像在您可以说您的hashmap完成之前要运行的基准测试案例是什么? 解决方案 好吧,如果您知道它们背后的基础知识,那就不太难了. 通常,您可以创建一个称为"桶"的数组,该数组包含键和值,并带有一个可选的指针来创建链接列表. 使用键访问哈希表时,您可以使用自定义哈希功能处理键,该键将返回整数.然后,您采用结果的模量,那就是阵列索引或"桶"的位置.然后,您使用存储的密钥检查未解决的键,如果匹配,则找到正确的位置. 否则,您已经有一个"碰撞",并且必须沿着链接列表爬网并比较键,直到匹配为止. (请注意,某些实现使用二进制树而不是链接列表进行碰撞). 查看此快速哈希表实现: /khash-h/ 其他解决方案 哈希姆普的主要目标是存储数据集,并使用唯一的键在其上提供接近恒定的时间查找. Hashmap实现有两种常见的样式: 单独的链接
22 2024-04-06
编程技术问答社区
如何理解位置敏感哈希?
我注意到LSH似乎是找到具有高维度属性的类似物品的好方法. 阅读论文后 http://www.slaney.org/malcolm/yahoo/slaney2008-lshtutorial.pdf ,我仍然对那些公式感到困惑. 有人知道一个博客或文章,这说明了简单的方法吗? 解决方案 我为LSH看到的最好的教程是:大规模数据集的采矿. 检查第3章 - 查找类似的项目 一个> 我也建议下面的幻灯片: /vandurmelallacl10-slide.pdf . 幻灯片中的示例有助于我理解余弦相似性的哈希. 我从 Benjamin van durme&Ashwin lall,Acl2010 尝试解释LSH家族的余弦距离的直觉. 在图中,有两个带有红色和黄色彩色的圆圈,代表两个二维数据点.我们正在尝试找到他们的 cesine相似性使用lsh. 灰色线是一些均匀随机挑选的平面. 取决于数据点位于灰色线上还是以下是灰线,我们将此关系标记为0/1. 在左上
14 2024-04-05
编程技术问答社区
为什么Java HashMap会变慢?
我尝试构建具有文件内容的地图,而我的代码如下: System.out.println("begin to build the sns map...."); String basePath = PropertyReader.getProp("oldbasepath"); String pathname = basePath + "\\user_sns.txt"; FileReader fr; Map> snsMap = new HashMap>(2000000); try { fr = new FileReader(pathname); BufferedReader br = new BufferedReader(fr); String line; int
10 2024-04-04
编程技术问答社区
不能将变量借为可变的,因为在建立一个自我参照的HashMap时,它也被借为不可变的。
我正在尝试构建一个自我参照HashMap: use std::collections::HashMap; struct Node { byte: u8, map: HashMap>, } fn main() { let mut network = HashMap::::new(); network.insert(0, Node { byte: 0, map: HashMap::::new() }); network.insert(1, Node { byte: 1, map: HashMap::::new() }); let zeroeth_node = network.get(&0).unwrap(); let mut first_node = network.get_mut(&1).unwrap();
22 2024-04-02
编程技术问答社区
试图从RwLock返回引用,"借来的值活得不够长 "错误
我最近一直在研究我的第一个Rust Project,但遇到了障碍.我正在使用HashMap映射String s到AtomicUsize整数. HashMap受A RwLock保护,以允许并发访问.我希望能够返回HashMap中的AtomicUsize值的引用,但是,如果我尝试将这些引用返回到呼叫者的生命周期RwLockWriteGuard的生命周期,我会收到一个错误.我在下面重现了一个最小的示例,并在Rust Playground上放置了相同的示例use std::collections::HashMap; use std::sync::RwLock; use std::sync::atomic::{AtomicUsize, Ordering}; struct Bar { val: AtomicUsize } impl Bar { pub fn new() -> Self { Bar { val: AtomicUsize::new(0) } } } struct Foo { map: R
14 2024-04-02
编程技术问答社区
关于Rust HashMap和字符串借用的困惑
该程序接受一个整数n,然后接受n行,其中包含两个由空间隔开的字符串.我想使用第一个字符串作为键,将这些行放入HashMap中,将第二个字符串作为值: use std::collections::HashMap; use std::io; fn main() { let mut input = String::new(); io::stdin().read_line(&mut input) .expect("unable to read line"); let desc_num: u32 = match input.trim().parse() { Ok(num) => num, Err(_) => panic!("unable to parse") }; let mut map = HashMap::::new(); for _ in 0..desc_num
12 2024-04-02
编程技术问答社区
如何在Rust中懒散地创建构造使用自我的地图条目
我正在尝试实现rust中的懒惰构造/记忆的评估/缓存成语. 有一个外部类型,它具有大量数据和一个访问者方法.访问者方法需要返回缓存的计算(如果有一个)或计算它并将返回值存储在地图中以备后用.缓存值不需要引用外部值,因此没有循环参考问题.但是它确实需要访问外部值的数据才能构建自身. 这是一个完整的示例,它不会通过Rust的借用检查器: use std::collections::HashMap; pub struct ContainedThing { count: usize, } impl ContainedThing { fn create(thing: &Thing) -> ContainedThing { // create uses an arbitrary number of attributes from Thing // it doesn't keep any references after retur
10 2024-04-02
编程技术问答社区
在使用入口模式时,如何突变HashMap的其他元素?
我想使用HashMap来缓存一个昂贵的计算,该计算取决于地图中的其他条目.进入模式仅提供对匹配值的可变引用,但不提供HashMap的其余部分.我真的很感谢关于解决此(不正确的)玩具示例的更好方法的反馈: use std::collections::HashMap; use std::collections::hash_map::Entry::{Occupied, Vacant}; fn compute(cache: &mut HashMap, input: u32) -> u32 { match cache.entry(input) { Vacant(entry) => if input > 2 { // Trivial placeholder for an expensive computation. *entry.insert(compute(&mut cache, input - 1
12 2024-04-02
编程技术问答社区
如何在boost::unordered_map中使用自定义类型的键?
我现在正在使用Boost在项目中的哈希地图实现,并且我正在尝试实现键的自定义类型.我有四个未签名的整数,我想将其合并到一个128位数据类型中以用作键. 我创建了一个带有四个元素的32位整数数组的结构,该元素是我的存储空间.老实说,我不确定Boost的Hash Map如何工作,所以我不确定自己在这里做什么,但是我遵循了Boost文档( http://wwwwww.boost.org/doc/doc/libs/libs/1_37_0/1_37_0/doc/doc/doc/html/html/hash/hash/hhash/hhash/custom.html )用于扩展boost :: hash,然后我创建了一个哈希功能以及自定义比较操作员. 我的标题中定义了此自定义类型.这是我的代码: #ifndef INT128_H_ #define INT128_H_ // Custom 128-bit datatype used to store and compare the r
12 2024-04-02
编程技术问答社区
如何在boost::unordered_map中使用自定义类型的键?
我现在正在使用Boost在项目中的哈希地图实现,并且我正在尝试实现键的自定义类型.我有四个未签名的整数,我想将其合并到一个128位数据类型中以用作键. 我创建了一个带有四个元素的32位整数数组的结构,该元素是我的存储空间.老实说,我不确定Boost的Hash Map如何工作,所以我不确定自己在这里做什么,但是我遵循了Boost文档( http://wwwwww.boost.org/doc/doc/libs/libs/1_37_0/1_37_0/doc/doc/doc/html/html/hash/hash/hhash/hhash/custom.html )用于扩展boost :: hash,然后我创建了一个哈希功能以及自定义比较操作员. 我的标题中定义了此自定义类型.这是我的代码: #ifndef INT128_H_ #define INT128_H_ // Custom 128-bit datatype used to store and compare the r
8 2024-04-02
编程技术问答社区