热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将Char*映射到两个整数-MappingaChar*totwoIntegers

Iamlookingforthefastestwaytomapastringtotwointegers,andmapthoseintegerstothestri

I am looking for the fastest way to map a string to two integers, and map those integers to the string.

我正在寻找将字符串映射到两个整数的最快方法,并将这些整数映射到字符串。

This is the structure for each element:

这是每个元素的结构:

  • char* name
  • uint32_t license_id
  • uint32_t ss_id

Each field is unique, all fields are constants, and no elements will be added after compile-time. Because they are unique, I want to make the following search functions:

每个字段都是唯一的,所有字段都是常量,编译后不会添加任何元素。因为它们是唯一的,我想制作以下搜索功能:

uint32_t get_license_from_name(char *name);
uint32_t get_ssid_from_name(char *name);
void get_name_from_license(uint32_t license, char *name);
void get_name_from_ssid(uint32_t ssid, char *name);

From searching, I know it is possible to create a separate hashmap for each pair of search terms. Is this my best choice? I was hoping I could take advantage of the fact that these values are always known, unlike other questions I found.

从搜索开始,我知道可以为每对搜索项创建单独的散列映射。这是我最好的选择吗?我希望我可以利用这些价值总是已知的事实,这与我发现的其他问题不同。

Is there an O(1) solution to this problem?

这个问题有O(1)解决方案吗?

2 个解决方案

#1


0  

How about using only one set implemented by binary tree?

如何只使用二叉树实现的一组?

Key:
     {name, license, ssid}

Function Compare:

     name_compare(name1, name2) || license_compare(license1, license2) || ssid_compare(ssid1, ssid2)

This is an O(logN) search.

这是一个O(logN)搜索。

#2


0  

It would be useful to give some detail on the values. If the values were originally integers, which have been converted to a character array for transport, than the problem can be solved by casting it to an int. Otherwise, your best option is to use stdlib.h functions like atoi() and atoc().

提供有关值的一些细节会很有用。如果这些值最初是整数,已经转换为用于传输的字符数组,那么问题可以通过将其转换为int来解决。否则,您最好的选择是使用像atoi()和atoc()这样的stdlib.h函数。

Based on your example code it looks like you are trying to extract two values from the same char array. If this is the case I would recommend using memcpy() like this.

根据您的示例代码,您似乎尝试从同一个char数组中提取两个值。如果是这种情况,我建议使用像这样的memcpy()。

/* Based on what you wrote above I am assuming name is 8 bytes  */
int firstValueSize = 4/* whatever size in bytes the first number should be */;
int secOndValueSize= 4/* Same with this */;
int *firstValue = (int)malloc(sizeof(int));
int *secOndValue= (int)malloc(sizeof(int));
memcpy(firstValue, name, sizeof(firstValueSize));
memcpy(secondValue, name + firstValueSize, sizeof(secondValueSize));

This should work if they were originally integers. Otherwise you will have to use the functions mentioned above.

如果它们最初是整数,则应该有效。否则你将不得不使用上面提到的功能。


推荐阅读
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
author-avatar
你可知马羔_523
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有