我想知道是否有任何可能的方法使用与实际键相同的键从哈希表中检索项目,但是使用不同的对象.我理解为什么它可能不可能,但我想看看是否有任何棘手的方法来做到这一点.
我的问题源于这样一个事实,即像我一样愚蠢,我用int []作为键创建了哈希表,整数数组包含表示空间位置的索引.我不知何故知道每次我想添加一个新条目时我都需要创建一个新的int [],但忽略了当我生成空间坐标数组时,它们在检索哈希表中的值时毫无价值.
现在我正在尝试重新排列事物,以便我可以将我的值存储在ArrayLists中,或者是否在每次我想要获取值时搜索Hashtable中的键列表,而不是选项非常酷.
除非当然有一种方法让// 1像// 2一样工作!
提前致谢.
static void Main(string[] args)
{
Hashtable dog = new Hashtable();
//1
int[] man = new int[] { 5 };
dog.Add(man, "hello");
int[] cat = new int[] { 5 };
Console.WriteLine(dog.ContainsKey(cat)); //false
//2
int boy = 5;
dog.Add(boy, "wtf");
int kitten = 5;
Console.WriteLine(dog.ContainsKey(kitten)); //true;
}
Run Code Online (Sandbox Code Playgroud) 所以我需要读取位中的标志并以位为单位设置标志.这些位有各种大小的整数:int16,int32,int64等.
我想有一个像这样的功能:
static integertype function(integertype data, char startbit, char endbit);
Run Code Online (Sandbox Code Playgroud)
我不想编码将在相同但相同的函数中为不同大小的整数隔离相同代码的代码(对于我想写的多个位函数).
我想过为数据使用void指针,所以一切都可以通过一个函数运行.这是一个糟糕的设计吗?效率怎么样?由于我的经验不足,我没有坏/好设计的概念.
static int function(void *data, char startbit, char endbit)
Run Code Online (Sandbox Code Playgroud)
必须经常查看这些标志,因为这是针对数据采集系统的.void指针实现是否合理有效?
我知道过早优化是不好的,但我想知道哪些东西通常比其他东西更少或更有效,所以我可以做出正确的决定.
提前谢谢你带我去学校.
我试图使用一个大的2D矢量,我想用新的分配(因为它很大).
如果我说:
vector< vector<int> > bob;
bob = vector< vector<int> >(16, vector<int>(1<<12,0));
bob[5][5] = 777;
Run Code Online (Sandbox Code Playgroud)
有用.但如果我说:
std::vector< std::vector<int> > *mary;
mary = new vector< vector<int> >(16, vector<int>(1<<12, 0));
mary[5][5] = 777;
Run Code Online (Sandbox Code Playgroud)
它不起作用,我收到错误:
错误1错误C2679:二进制'=':找不到哪个操作符采用'int'类型的右操作数(或者没有可接受的转换)c:\ Users\jsparger\Documents\My Dropbox\ARI\VME_0.01\VME_0.01\V965.cpp 11 VME_0.01
显然我是C++的新手.有人可以解释我需要使用什么语法来执行此操作.玛丽是一个指针,所以我可以看出为什么这不起作用,但是*mary [5] [5] =因为"新"而不允许的任何东西,对吧?
谢谢您的帮助.这个载体就是我现在要用的东西,因为它似乎很容易让我的小c ++大脑理解,但是如果像这样的大型载体是一个坏主意等,请随时告诉我.
谢谢一堆.
编辑:我错误地认为"因为新的而不允许".我不知道我在哪里误读了它,因为它显然有效,并且不会因为它不太有意义.谢谢.
所以我希望有一个像这样的结构数组的缓冲区:
EventItem
{
tag; // some string or array of characters to describe the value;
value; // some integer or something
}
Run Code Online (Sandbox Code Playgroud)
值可以是int32之类的值.我关心的是标签.如果我有这些对象的数组,并且我将标记设为字符串,那么如果用户将EventItem输入到具有长标记的缓冲区中会发生什么?是否会导致缓冲区或其中的一部分被复制到内存中的其他位置以保存这个更大的EventItem(因为这个长字符串更大)?
通过使用数组而不是字符串来使用固定数量的字符来限制标记会更好吗?
显然我并不确切地知道我在说什么,但我不知道如何在不知道EventItems大小的情况下用适当数量的连续空间创建缓冲区.
有人可以解释一下这种情况会对我有什么影响吗?
首先十分感谢!