从某些来源^,我得到了一个长度为 20 (SHA-1) 的哈希缓冲区,用于特定数据(比如文件或字节块)。如果给定的哈希值(将其视为字符串,而不是哈希)是没有在地图中找到,那么我会拉更多的信息,然后将这个散列这一信息。要说清楚:
unordered_map<Hash_of_20_Bytes, Information>这是我的地图。键是一个 20 字节的缓冲区,Information是一些包含详细信息的结构。因此,如果源 ^给了我一些散列,我会在此信息映射中查找该散列并适当地使用/生成。
关键是,就我而言,给定的 20 字节散列保证没有任何冲突。但是,unordered_map仍会计算密钥的 (FNV) 哈希值(密钥本身就是哈希值!)。我不能指示集合类不要生成散列,而是使用具有唯一键本身的键(以确保 O(1))?
我不确定是否也unordered_map计算整数的散列(即减少额外计算的需要)。
一种方法是使用pair<20-byte, Info>自身的向量,并进行二分搜索。然而,只是为了避免哈希计算的惩罚(通过哈希容器),它会导致保持向量排序的更多惩罚)。
我似乎无法在我的mfc应用程序代码中找到任何退出函数.当我点击应用程序右上角的红叉时,我希望我的应用程序实际保存一些设置.谁知道这个出口功能在哪里?谢谢
我是C++的新手.我写了一个函数,我希望用户输入一个整数值.我知道如何使用以下方法阻止输入字符:
if(!(cin>>a))
Run Code Online (Sandbox Code Playgroud)
要么
if (cin.fail())
Run Code Online (Sandbox Code Playgroud)
哪里a是类型int.如果用户首先输入字符然后输入例如:ab12代码的数字,但是如果用户输入相反的方式,例如12ab,12将其作为输入值.我怎么能防止这种情况?
我想实时获取当地时间.代码和结果如下,显示奇怪;
int main() {
while (true) {
char sentdata[64] = { 0 };
GetLocalTime(&sys);
sprintf(sentdata, "A,%02d:%02d:%02d.%03d,B\n", sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds);
cout << sentdata << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在其他PC上尝试了相同的代码,结果显示如下,它可以显示每毫秒.
为什么tmie在某个循环中是相同的?我认为每个循环的时间应该不同.
在一个特定的函数中,我收到一个文件HANDLE,我想检查这个文件句柄是否是真正的磁盘文件句柄而不是管道句柄.保证它可以是磁盘文件句柄,也可以是管道句柄而不是任何其他类型的句柄.
我该怎么做?
void ProcessHandle(HANDLE hFile)
{
// Process only if disk file handle
}
Run Code Online (Sandbox Code Playgroud)
函数GetFileInformationByHandle将检索文件句柄信息,如果句柄是管道句柄,则会失败,如下所述:
此句柄不应是管道句柄.
但是,它需要一个大型结构(BY_HANDLE_FILE_INFORMATION)并填充信息.我不是在寻找这些详细信息,因此使用此功能会带来性能损失.
为什么不编译?
class Test
{
void foo();
void foo()
{ }
};
Run Code Online (Sandbox Code Playgroud)
但这些将编译:
void bar();
void bar()
{ }
// In same header/file
class Test
{
void foo();
};
void Test::foo()
{ }
Run Code Online (Sandbox Code Playgroud)
编译器会说给定的方法不能重载.该方法Test::foo没有被重载 - 它具有完全相同签名的相同功能.
我想在网站上发布一个问题,而我的问题完全适合规则错误
这是我的问题(是否有可能将c ++代码转换为汇编或机器代码以获得性能?我知道更低级别的语言在硬件上运行更快,因为直接访问硬件,而更高级别的语言需要编译,所以我的想法是编译c ++代码一次并保存并运行编译版本是否实用?我听说它需要1-1编译器这样的东西存在吗?)