为什么在下面的哈希函数(返回常量0)似乎没有产生任何影响?
由于散列函数返回常量,我期望输出所有值为3.但是std::vector,无论我的散列函数是否为常量,它似乎都将值唯一映射到唯一值.
#include <iostream>
#include <map>
#include <unordered_map>
#include <vector>
// Hash returning always zero.
class TVectorHash {
public:
std::size_t operator()(const std::vector<int> &p) const {
return 0;
}
};
int main ()
{
std::unordered_map<std::vector<int> ,int, TVectorHash> table;
std::vector<int> value1({0,1});
std::vector<int> value2({1,0});
std::vector<int> value3({1,1});
table[value1]=1;
table[value2]=2;
table[value3]=3;
std::cout << "\n1=" << table[value1];
std::cout << "\n2=" << table[value2];
std::cout << "\n3=" << table[value3];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
获得的输出:
1=1
2=2
3=3
Run Code Online (Sandbox Code Playgroud)
预期产量:
1=3
2=3
3=3
Run Code Online (Sandbox Code Playgroud)
我对哈希有什么看法?
在C++ 17中std::shared_ptr有一个operator []允许索引基于矢量的指针(http://en.cppreference.com/w/cpp/memory/shared_ptr/operator_at)
如果这样的操作符不可用,我如何获得类似的访问,我仍然想要使用智能指针来获取元素数组,例如:
std::shared_ptr<unsigned char> data;
data.reset(new unsigned char[10]>;
// use data[3];
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
std::ostream file;
if( file == NULL ) std::cout << "Failed to open file" << std::endl;
Run Code Online (Sandbox Code Playgroud)
它在传递-std = gnu11(默认来自GCC 5.2)或仅使用时完美编译
gcc code.cpp -o a.out.
它失败了-std = gnu ++ 11,但是:
no match for ‘operator==’ (operand types are ‘std::ofstream {aka std::basic_ofstream<char>}’ and ‘long int’)`
Run Code Online (Sandbox Code Playgroud)
什么是最简单的解决方法?
细节:
我必须使用std = gnu ++ 11来访问shared_ptr定义.此外,我的一些代码是自动生成的,修改生成器会产生合理的努力 - 所以我想知道是否有人可以想出更简单的方法来摆脱这种"缺乏兼容性".
算法的 python 实现是否可以与标准 C 库一起透明地工作?如果我有两个程序,一个是 Python,另一个是 C,尝试获取单个文件的锁会起作用吗?
快速链接:
我想知道是否有办法更改默认工具以生成Doxygen的消息序列图表(msc).Doxygen的实际默认工具是mscgen(http://www.mcternan.me.uk/mscgen/),它是一个很好的工具,但我想使用msc-gen(https://sites.google.com/site/mscgen2393 /)这似乎是一个更完整的工具.
我已经尝试在"MSCGEN_PATH =/usr/bin /"创建一个链接到msc-gen(如ln -s/usr/bin/msc-gen ./mscgen),但工具的命令行是不同的.有一种特定的方法可以配置Doxygen来"学习"这个新的工具命令行吗?
我找不到命名管道是否被缓冲,因此问题。
手册页说https://linux.die.net/man/3/mkfifo:
FIFO 特殊文件类似于管道……任何进程都可以打开它进行读取或写入,就像普通文件一样。
管道没有缓冲,不需要刷新。但是在普通文件中,我会刷新(或 fsync)文件描述符。
命名管道怎么样?
给定进程的 PID,有没有办法找出该进程是否重定向了 stdin 或 stdout?
我有一个从标准输入读取数据的应用程序。为了方便起见,我通常使用从文件重定向的 stdin 来启动此应用程序,如下所示:
app < input1.txt
问题是,有时我启动应用程序并忘记我使用的输入文件是什么。有没有办法找出哪个文件已用于重定向标准输入?
使用ps -aux | grep PID允许我查看使用的命令行。但没有给我任何有关stdin或 的信息stdout。
我也尝试过查看top以及 in/proc/PID/*但没有找到任何东西。
我正在使用 CentOS 7,如果有帮助的话。
当我想在字符串中使用特殊字符时,我应该使用“\”:
std::string text("item \t new_item\n")
Run Code Online (Sandbox Code Playgroud)
但是,如果我打印这个字符串,显然它会打印:
item new_item
Run Code Online (Sandbox Code Playgroud)
有没有办法设置 std::cout 来打印所有特殊字符:
item \t new_item \n
Run Code Online (Sandbox Code Playgroud) 我遇到过一个包含以下代码的C++库:
void *data;
unsigned length;
...
addr = data + length
Run Code Online (Sandbox Code Playgroud)
首先,使用void*算术没有多大意义,因为编译器不知道每个元素的"大小"是什么(这里更好地解释: void*arithmetic).
但是,因为我已经使用了我的代码库,它似乎工作,我想知道以下内容.这种行为是否具有确定性,因为所有GCC每次都会生成相同的代码?或者,GCC会以启发式的方式对其进行优化吗?
我有一个CSV字符串,其中一些项目可能被{}逗号括在里面.我想在列表中收集字符串值.
在列表中收集值的最pythonic方法是什么?
例1 'a,b,c':,预期输出['a', 'b', 'c']
例2 '{aa,ab}, b, c':,预期输出['{aa,ab}','b','c']
例3: '{aa,ab}, {bb,b}, c'预期输出['{aa,ab}', '{bb,b}', 'c']
我试图使用s.split(',')它,它适用于例1,但会陷入案例2和3.
我相信这个问题(如何拆分但忽略引用字符串中的分隔符,在python中?)与我的问题非常相似.但我无法弄清楚要使用的正确的正则表达式语法.
是否可以使用预处理指令测试文件是否已包含在内?
我想实现这样的目标:
#ifincluded assert.h
#error "Should not include assert.h"
#endif
Run Code Online (Sandbox Code Playgroud)
目前,我知道assert.h已经定义了解决这个问题_ASSERT_H.在这种情况下,我可以使用#ifdef _ASSERT_H.问题是这是特定于实现的.
有没有更好的方法来实现这一目标?