小编Jon*_*Jon的帖子

安慰的表现比检查后的安慰更糟糕

我有一个没有默认构造函数std::unordered_mapvalue_type所以我不能执行以下操作

auto k = get_key();
auto& v = my_map[k];
Run Code Online (Sandbox Code Playgroud)

我最终编写了一个辅助函数

value_type& get_value(key_type& key)
{
    return std::get<0>(my_map.emplace(
                              std::piecewise_construct,
                              std::forward_as_tuple(key),
                              std::forward_as_tuple(args_to_construct_value)
                      ))->second;
}
Run Code Online (Sandbox Code Playgroud)

但是性能明显更差(即value_type的构造函数出现在perf中),而不是以下版本.

value_type& get_value(key_type& key)
{
    auto it = my_map.find(key);
    if (it == my_map.end())
        return std::get<0>(my_map.emplace(
                                  std::piecewise_construct,
                                  std::forward_as_tuple(key),
                                  std::forward_as_tuple(args_to_construct_value)
                          ))->second;
    else
        return it->second;
}
Run Code Online (Sandbox Code Playgroud)

我从std :: unordered_map :: emplace对象创建中读取了emplace需要构造对象以查看是否存在.但是,在返回之前,emplace正在检查地图中是否存在此键值对.

我用错误的方式使用emplace吗?是否有一个更好的模式我应该遵循:

  1. 不会在每次查找时构造我的value_type(如在我的第一个方法中)
  2. 不会检查我的地图中是否存在value_type两次(如我的第二种方法)

谢谢

c++ performance unordered-map c++11 emplace

10
推荐指数
1
解决办法
1661
查看次数

jq:从对象中选择键的子集

给定来自数组的键的输入json字符串,返回一个对象,其中只包含原始对象和输入数组中具有键的条目.

我有一个解决方案,但我认为它不优雅({($k):$input[$k]}感觉特别笨重...),这是我学习的机会.

jq -n '{"1":"a","2":"b","3":"c"}'   \
    | jq --arg keys '["1","3","4"]' \
    '. as $input 
     | ( $keys | fromjson )
     | map( . as $k
          | $input
          | select(has($k))
          | {($k):$input[$k]}
          )
     | add'
Run Code Online (Sandbox Code Playgroud)

任何想法如何清理这个?

我觉得从嵌套的JSON对象中提取选定的属性与jq是一个很好的起点,但我无法让它工作.

select json key subset jq

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

JQ: setdiff of two arrays

If I have an object with two arrays containing unique values in it

{"all":["A","B","C","ABC"],"some":["B","C"]}
Run Code Online (Sandbox Code Playgroud)

How can I find .all - .some?

在这种情况下,我正在寻找 ["A","ABC"]

set-difference jq

7
推荐指数
1
解决办法
3232
查看次数

如何将bash数组格式化为JSON数组

我有一个bash数组

X=("hello world" "goodnight moon")
Run Code Online (Sandbox Code Playgroud)

我想变成一个json数组

["hello world", "goodnight moon"]
Run Code Online (Sandbox Code Playgroud)

有没有一种好方法让我把它变成一个json数组的字符串,而不用在子shell中循环键?

(for x in "${X[@]}"; do; echo $x | sed 's|.*|"&"|'; done) | jq -s '.'
Run Code Online (Sandbox Code Playgroud)

这显然不起作用

echo "${X[@]}" | jq -s -R '.'
Run Code Online (Sandbox Code Playgroud)

arrays bash json jq

5
推荐指数
3
解决办法
5928
查看次数

用c ++中的内在函数检查nans

我是新手使用内在函数但是我想编写一个函数,它接受4个双精度计算器的计算a > 1e-5 ? std::sqrt(a) : 0.0我的第一直觉是写如下

#include <immintrin.h>
__m256d f(__m256d a)
{
  __m256d is_valid = a > _mm256_set1_pd(1e-5);
  __m256d sqrt_val = _mm256_sqrt_pd(a);
  return is_valid * sqrt_val;
}
Run Code Online (Sandbox Code Playgroud)

根据gcc.godbolt.com编译如下

f(double __vector(4)):
    vsqrtpd  ymm1, ymm0
    vcmpgtpd ymm0, ymm0, YMMWORD PTR .LC0[rip]
    vmulpd   ymm0, ymm1, ymm0
    ret
.LC0:
    .long   2296604913
    .long   1055193269
    .long   2296604913
    .long   1055193269
    .long   2296604913
    .long   1055193269
    .long   2296604913
    .long   1055193269
Run Code Online (Sandbox Code Playgroud)

但我担心如果sqrt_val包含一个会发生什么nan.我认为0.0 * nan不会起作用.这里有什么最好的做法?

编辑

在阅读了@ChrisCooper(和@njuffa)的评论后,我被链接到另一个堆栈溢出答案,所以我将测试自我平等,然后and用我的结果测试.

#include <immintrin.h>
__m256d …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point intrinsics

4
推荐指数
1
解决办法
397
查看次数

C++ 中的自定义可见性修饰符

我正在阅读《信号与槽》| Qt Core 5.4,他们剪掉了以下代码。

#include <QObject>

class Counter : public QObject
{
    Q_OBJECT

public:
    Counter() { m_value = 0; }

    int value() const { return m_value; }

public slots:
    void setValue(int value);

signals:
    void valueChanged(int newValue);

private:
    int m_value;
};
Run Code Online (Sandbox Code Playgroud)

我以前见过privatepublic、 ,protected但从未见过这样的事情。

  • public slots:整体和可见性修饰符是怎么回事signals:(这就是它们的名字)?

  • 他们的意思是什么?他们在标准中的什么地方谈论这个?

  • 我什么时候可以/应该在我自己的代码中使用这些?

c++

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