标签: std-pair

Java中C++ Pair <L,R>的等价物是什么?

有没有一个很好的理由为什么Pair<L,R>Java中没有?这个C++构造的等价物是什么?我宁愿避免重新实现自己.

似乎1.6提供类似的东西(AbstractMap.SimpleEntry<K,V>),但这看起来很复杂.

java tuples std-pair

655
推荐指数
17
解决办法
45万
查看次数

什么是C++ std :: pair的C#模拟?

我很感兴趣:C#std::pair在C++中的模拟是什么?我找到了System.Web.UI.Pair课程,但我更喜欢基于模板的课程.

谢谢!

.net c# base-class-library data-structures std-pair

277
推荐指数
7
解决办法
20万
查看次数

std :: make_pair与std :: pair的构造函数的目的是什么?

目的是std::make_pair什么?

为什么不std::pair<int, char>(0, 'a')呢?

这两种方法有什么区别吗?

c++ stl std-pair

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

插入地图的首选/惯用方式

我已经确定了四种不同的插入方式std::map:

std::map<int, int> function;

function[0] = 42;
function.insert(std::map<int, int>::value_type(0, 42));
function.insert(std::pair<int, int>(0, 42));
function.insert(std::make_pair(0, 42));
Run Code Online (Sandbox Code Playgroud)

哪一种是首选/惯用的方式?(还有另一种我没想过的方法吗?)

c++ stl insert stdmap std-pair

91
推荐指数
5
解决办法
10万
查看次数

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

a std::pairstd::tuple只有两个成员之间有区别吗?(除了明显std::pair需要两个,只有两个成员,tuple可能会少...)

c++ tuples visual-studio-2010 stdtuple std-pair

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

为什么从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>是namespace std
  • 我们不允许超载std::begin/ std::endstd::pair自己
  • 我们不能专门化std::begin/ std::endfor std::pair(因为专业化必须是部分的,而且不允许使用函数)

还有其他一些我失踪的方式吗?

c++ foreach range c++11 std-pair

54
推荐指数
3
解决办法
8009
查看次数

添加到对的向量

我有一个vectorpair像这样的:

vector<pair<string,double>> revenue;
Run Code Online (Sandbox Code Playgroud)

我想在地图中添加一个字符串和一个double,如下所示:

revenue[i].first = "string";
revenue[i].second = map[i].second;
Run Code Online (Sandbox Code Playgroud)

但由于收入未初始化,因此出现了出界错误.所以我尝试使用vector::push_back这样的:

revenue.push_back("string",map[i].second);
Run Code Online (Sandbox Code Playgroud)

但那说不能采取两个论点.那么,如何可以添加到这个vectorpair

c++ vector std-pair

48
推荐指数
5
解决办法
17万
查看次数

C++打印出地图值

所以我有这样的地图:

map<string, pair<string,string> > myMap;
Run Code Online (Sandbox Code Playgroud)

我使用以下方法在地图中插入了一些数据:

myMap.insert(make_pair(first_name, make_pair(middle_name, last_name)));
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何打印出地图中的所有数据?请举例说明我的参考.

c++ printing dictionary for-loop std-pair

45
推荐指数
3
解决办法
16万
查看次数

为什么来自匿名对象的 std::pair 复制该对象而不是移动?

我试图std::pair用这种风格制作:

#include <iostream>

struct A {
    A() noexcept {
        std::cout << "Created\n";
    }
    A(const A&) noexcept {
        std::cout << "Copy\n";
    }
    A(A&&) noexcept {
        std::cout << "Move\n";
    }
};

int main() {
    std::pair<A, A> a{ {},{} };
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并得到这样的输出:

Created
Created
Copy
Copy
Run Code Online (Sandbox Code Playgroud)

代替

Created 
Created
Move
Move
Run Code Online (Sandbox Code Playgroud)

但是如果我定义我的匿名对象类型(例如std::pair<A, A> a{A{}, A{}})或使用std::make_pair<A, A>({}, {})我得到正确的结果。

std::pair构造函数必须使用std::forward<U1>std::forward<U2>来初始化对象,因此我认为我的配对使用了错误的构造函数。为什么?

c++ stl std-pair

45
推荐指数
1
解决办法
1753
查看次数

为什么std :: pair比std :: tuple更快

这是测试代码.

元组测试:

using namespace std;

int main(){

    vector<tuple<int,int>> v;


    for (int var = 0; var < 100000000; ++var) {
        v.push_back(make_tuple(var, var));
    }
}
Run Code Online (Sandbox Code Playgroud)

配对测试:

#include <vector>

using namespace std;

int main(){

    vector<pair<int,int>> v;


    for (int var = 0; var < 100000000; ++var) {
        v.push_back(make_pair(var, var));
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过Linux time命令进行了时间测量.结果是:

|       |   -O0   |    -O2   |
|:------|:-------:|:--------:|
| Pair  |   8.9 s |  1.60 s  |
| Tuple |  19.8 s |  1.96 s  |
Run Code Online (Sandbox Code Playgroud)

我想知道,为什么O0中的这两个数据结构之间存在如此大的差异,因为它们应该非常相似.02中只有一点不同.

为什么O0的差异如此之大,为什么会有任何差异呢?

编辑:

v.resize()的代码

对:

#include …
Run Code Online (Sandbox Code Playgroud)

performance c++11 stdtuple std-pair

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