小编rph*_*rph的帖子

unordered_map - 哈希函数无效

为什么在下面的哈希函数(返回常量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++ hash unordered-map

9
推荐指数
2
解决办法
1104
查看次数

std :: shared_ptr operator []等效访问

在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)

c++ pointers smart-pointers

6
推荐指数
1
解决办法
535
查看次数

std :: ofstream == NULL不会为-std = gnu ++ 11编译,任何解决方法?

请考虑以下代码:

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定义.此外,我的一些代码是自动生成的,修改生成器会产生合理的努力 - 所以我想知道是否有人可以想出更简单的方法来摆脱这种"缺乏兼容性".

c++ gcc stl c++11

5
推荐指数
1
解决办法
3583
查看次数

C 和 Python 之间的文件锁(flock)兼容性

算法的 python 实现是否可以与标准 C 库一起透明地工作?如果我有两个程序,一个是 Python,另一个是 C,尝试获取单个文件的锁会起作用吗?

快速链接:

  1. Python 群:https://docs.python.org/2/library/fcntl.html
  2. Linux 群: http: //linux.die.net/man/2/flock

c python linux locking

5
推荐指数
1
解决办法
1221
查看次数

更改Doxygen的消息序列图(MSC)工具

我想知道是否有办法更改默认工具以生成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来"学习"这个新的工具命令行吗?

charts doxygen

3
推荐指数
1
解决办法
1582
查看次数

我需要刷新命名管道吗?

我找不到命名管道是否被缓冲,因此问题。

手册页说https://linux.die.net/man/3/mkfifo

FIFO 特殊文件类似于管道……任何进程都可以打开它进行读取或写入,就像普通文件一样。

管道没有缓冲,不需要刷新。但是在普通文件中,我会刷新(或 fsync)文件描述符。

命名管道怎么样?

linux pipe fflush

3
推荐指数
1
解决办法
5409
查看次数

检查已运行的进程是否在 Linux 上重定向了标准输入?

给定进程的 PID,有没有办法找出该进程是否重定向了 stdin 或 stdout?

我有一个从标准输入读取数据的应用程序。为了方便起见,我通常使用从文件重定向的 stdin 来启动此应用程序,如下所示:

app < input1.txt

问题是,有时我启动应用程序并忘记我使用的输入文件是什么。有没有办法找出哪个文件已用于重定向标准输入?

使用ps -aux | grep PID允许我查看使用的命令行。但没有给我任何有关stdin或 的信息stdout

我也尝试过查看top以及 in/proc/PID/*但没有找到任何东西。

我正在使用 CentOS 7,如果有帮助的话。

linux terminal process

3
推荐指数
1
解决办法
1585
查看次数

打印字符串变量及其特殊字符

当我想在字符串中使用特殊字符时,我应该使用“\”:

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++ printf

2
推荐指数
2
解决办法
2万
查看次数

GCC的"无效指针算术"是否具有确定性?

我遇到过一个包含以下代码的C++库:

void *data;
unsigned length;
...
addr = data + length
Run Code Online (Sandbox Code Playgroud)

首先,使用void*算术没有多大意义,因为编译器不知道每个元素的"大小"是什么(这里更好地解释: void*arithmetic).

但是,因为我已经使用了我的代码库,它似乎工作,我想知道以下内容.这种行为是否具有确定性,因为所有GCC每次都会生成相同的代码?或者,GCC会以启发式的方式对其进行优化吗?

c++ gcc pointers

2
推荐指数
1
解决办法
74
查看次数

Python使用可能的集解析CSV字符串

我有一个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中?)与我的问题非常相似.但我无法弄清楚要使用的正确的正则表达式语法.

python csv parsing

2
推荐指数
1
解决办法
70
查看次数

使用预处理指令检查是否包含标题?

是否可以使用预处理指令测试文件是否已包含在内?

我想实现这样的目标:

#ifincluded assert.h
#error "Should not include assert.h"
#endif
Run Code Online (Sandbox Code Playgroud)

目前,我知道assert.h已经定义了解决这个问题_ASSERT_H.在这种情况下,我可以使用#ifdef _ASSERT_H.问题是这是特定于实现的.

有没有更好的方法来实现这一目标?

c++ c-preprocessor

0
推荐指数
1
解决办法
70
查看次数