问题标签 [std-pair]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
9729 浏览

c++ - STL map插入效率:[] vs. insert

地图插入有两种方式:

或者

我的问题是,哪个操作更快?人们通常说第一个比较慢,因为 STL 标准首先在 map 中不存在“key”时“插入”一个默认元素,然后将“val”分配给默认元素。

但我不认为第二种方式更好,因为'make_pair'。与pair<T1, T2>(key, val). 无论如何,他们都做了两个任务,一个是将“key”分配给“pair.first”,另一个是将“val”分配给“pair.second”。完成pair后,map插入由'pair.second'初始化的元素。

所以第一种方式是 1.' default construct of typeof(val)' 2. assignment 第二种方式是 1. assignment 2. ' copy construct of typeof(val)'

0 投票
1 回答
14552 浏览

c++ - 如何指定对的比较?

有一个pair

我有一个vector对象myPair。我需要使用整数make_heap的第二个值将它转换为最小堆。pair我怎样才能做到这一点?我不确定如何定义比较操作。

0 投票
3 回答
8768 浏览

c++ - 为什么从 C++11 中删除了对范围访问?

我刚刚发现,在某个时刻,C++11 草案有std::begin/std::end重载std::pair允许将一对迭代器视为适合在基于范围的 for 循环中使用的范围(N3126,第 20.3.5.5 节),但这有自从被删除。

有谁知道它为什么被删除?

我发现删除非常不幸,因为似乎没有其他方法可以将一对迭代器视为一个范围。确实:

  • 在基于范围的 for 循环中查找开始/结束的规则表明,开始/结束在 1) 中作为范围对象的成员函数 2) 作为“关联命名空间”中的自由函数进行查找
  • std::pair没有开始/结束成员函数
  • 通常,唯一关联的命名空间std::pair<T, U>是命名空间 std
  • 我们不允许超载std::begin/std::endstd::pair自己
  • 我们不能专门化std::begin/ std::endfor std::pair(因为专门化必须是部分的,而函数不允许这样做)

还有其他我想念的方式吗?

0 投票
4 回答
10296 浏览

c++ - C++:向量,int>>

这就是我的目标...

其中 x 是向量 var_name 的大小,y 是对内向量的大小。

上面的语句不起作用,因为 pair 模板只允许常量。我怎样才能让我的向量分别大小为 x 和 y?

0 投票
7 回答
2634 浏览

c++ - 向量<对> 不可能?

所以我尝试制作一个向量,其中元素是结构指针和整数对,我开始认为这可能是不可能的..

假设我有以下结构:

和一个向量:

然后我尝试创建一个新节点并将其放入向量中,显然它不起作用:

编译器对我咆哮说:nod1 不能出现在常量表达式中错误:模板参数 1 无效错误:模板结构 std::pair 的模板参数列表中参数 2 的类型/值不匹配

这只是不可能的事情吗?有什么可以替代的解决方案?您的意见将不胜感激!

0 投票
1 回答
6829 浏览

c++ - 一对优先级队列的自定义比较器>

这给了我错误

PairComparator从 cplusplus.com 论坛找到了代码

0 投票
1 回答
471 浏览

c++ - 有一双如何在地图中查找它是否属于某对的一部分?

我们有一对字符串,例如这样的一对Accept-Language : RU ,,我们通过映射搜索,例如 http 请求标头。我们只需要知道 map 中是否存在这样的对 - 一个布尔值。如何进行软搜索意味着我们不需要找到完全相同的配对,但配对Accept-Language : ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4对我们来说也是有效的配对,如果存在这样的配对,我们可以认为我们已经发现我们的地图包含我们的配对。如何在 C++ 中创建用于执行此类搜索的函数?

0 投票
6 回答
65471 浏览

c++ - 只有两个成员的 std::pair 和 std::tuple 之间的区别?

只有两个成员的anstd::pair和an有区别吗?std::tuple(除了std::pair需要两个而且只有两个成员并且tuple可能或多或少的明显......)

0 投票
1 回答
16945 浏览

c++ - c++ 中的 std::pair 数组有问题吗?

我今天正在玩一些代码,我想到了将一堆对放在一个数组中的想法,但我无法让它工作。这是代码:

这个程序的输出并不是我输入的全部。

0 投票
1 回答
3559 浏览

c++ - 在 std::pair 中存储不可复制(但可移动)的对象

我正在尝试将不可复制(但可移动)的对象存储在 std::pair 中,如下所示:

但是我在使用 gcc 4.6 时遇到以下编译器错误:

似乎编译器正在尝试调用std::pair<_T1, _T2>::pair(_U1&&, const _T2&)构造函数,这当然是有问题的。编译器不应该调用std::pair<_T1, _T2>::pair(_U1&&, _U2&&)构造函数吗?这里发生了什么?

编辑:好的,我知道提供显式移动构造函数可以解决问题,但我还是有点困惑。

假设我通过继承boost::noncopyable而不是声明我自己的私有复制构造函数来使类不可复制。

以下工作正常,表明隐式生成了移动构造函数:

但是,std::pair它仍然不起作用:

错误:

此外,添加= default-ed 默认构造函数和移动构造函数也无济于事!

我得到同样的错误!我必须自己明确给出移动构造函数的定义,如果类有很多成员,这很烦人: