标签: std-pair

C++是否提供"三重"模板,与<T1,T2>对相比?

C++有没有像std :: pair但有3个元素的东西?

例如:

#include <triple.h>
triple<int, int, int> array[10];

array[1].first = 1;
array[1].second = 2;
array[1].third = 3;
Run Code Online (Sandbox Code Playgroud)

c++ stl std-pair

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

尝试使用{}和s​​td :: make_pair()交换两个变量时的不同行为

我试图std::tie()按照以下代码交换两个变量(我知道std::swap,我只是出于好奇而尝试这个):

#include <iostream>
#include <tuple>

using std::cin; using std::tie; 
using std::cout; using std::endl;
using std::make_pair;

int main() {
    int a = 2, b = 10;
    cout << "Before Swapping using {}" << endl;
    cout << "a: " << a << " b: " << b < <endl;
    tie(a, b) = {b, a};
    cout << "After Swapping using {}" << endl;
    cout << "a: " << a << " b: " << b << endl;

    a = …
Run Code Online (Sandbox Code Playgroud)

c++ swap c++11 stdtuple std-pair

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

将其移动到地图后访问一对

如果我将一对移动到地图中,但由于密钥已经存在而插入失败,我可以安全地使用该对吗?

//objects available: map, pair

auto insert_pair = map.insert(std::move(pair));

if (!insert_pair.second)
{
  //can I safely access pair here?
}
Run Code Online (Sandbox Code Playgroud)

这是否已在标准中记录?

c++ map move-semantics c++11 std-pair

11
推荐指数
1
解决办法
336
查看次数

是否有一个标准的C++函数对象来拆分std :: pair?

有没有人知道是否有一个事实上的标准(即TR1或Boost)C++函数对象来访问std :: pair的元素?在过去24小时内,我曾两次希望我有类似keysPerl哈希函数的功能.例如,在std :: map对象上运行std :: transform并将所有键(或值)转储到另一个容器会很不错.我当然可以编写这样一个函数对象,但我更愿意重用那些有很多眼球的东西.

c++ boost tr1 std std-pair

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

如何将空对矢量推回到另一个向量?

  std::vector<std::vector< std::pair<int, int> > > offset_table;
  for (int i = 0; i < (offset.Width()*offset.Width()); ++i)
  {
    offset_table.push_back(  std::vector< std::pair<int, int> >  );
  }
Run Code Online (Sandbox Code Playgroud)

这是我的代码,但我收到错误:

main.cpp: In function ‘void Compress(const Image<Color>&, Image<bool>&, Image<Color>&, Image<Offset>&)’:
main.cpp:48:66: error: expected primary-expression before ‘)’ token
Run Code Online (Sandbox Code Playgroud)

我不想要成对中的任何值,我只想拥有一个空向量的向量.我该怎么做?

c++ vector push-back std-pair

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

具有lambda的对的向量的lower_bound

我想找到std::lower_bound的一个的std::vectorstd::pair根据的第二与拉姆达元素.

std::vector < std::pair <int, double> > vec;
vec.resize(5);

auto it = std::lower_bound(vec.begin(), vec.end(), lambda);
// what is that lambda here?
Run Code Online (Sandbox Code Playgroud)

c++ lambda stdvector std-pair

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

std :: map和std :: pair的问题

我有一个小程序,我想执行测试

#include <map>
#include <iostream>
using namespace std;

struct _pos{
        float xi;
        float xf;

        bool operator<(_pos& other){

                return this->xi < other.xi;
        }
};

struct _val{

        float f;
};

int main()
{
        map<_pos,_val> m;

        struct  _pos k1 = {0,10};
        struct  _pos k2 = {10,15};

        struct  _val v1 = {5.5};
        struct  _val v2 = {12.3};                                                                   

        m.insert(std::pair<_pos,_val>(k1,v1));
        m.insert(std::pair<_pos,_val>(k2,v2));

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试编译它时,我收到以下错误

$ g++ m2.cpp -o mtest
In file included from /usr/include/c++/4.4/bits/stl_tree.h:64,
                 from /usr/include/c++/4.4/map:60,
                 from m2.cpp:1:
/usr/include/c++/4.4/bits/stl_function.h: In member function ‘bool std::less<_Tp>::operator()(const _Tp&, …
Run Code Online (Sandbox Code Playgroud)

c++ stl operator-overloading stdmap std-pair

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

更正友元定义,使std :: map访问私有默认构造函数

我的工作,它使用应一个结构库具有由LIB的用户访问默认的构造函数.

struct Example
{
    Example(int x);

  private:
    Example();
};
Run Code Online (Sandbox Code Playgroud)

在库内部,std :: map需要默认构造函数来创建新条目.库在实际上将值放在使用默认构造函数的任何地方都非常小心.

该库使用映射来存储这些结构,如下所示:

std::map<int, Example> data;
Run Code Online (Sandbox Code Playgroud)

这里查看ideOne中的完整示例.

我想阻止lib的用户能够使用默认构造函数.我如何与std :: map,std :: pair和/或std :: tuple建立联系以允许std :: map使用这个默认构造函数?

friend class std::map<int, Example>;
friend class std::pair<int, Example>;
Run Code Online (Sandbox Code Playgroud)

不工作,我不知道如何与下面的抱怨beeing无法访问默认构造函数的构造函数交朋友:

// TEMPLATE CONSTRUCTOR pair::pair(tuple, tuple, sequence, sequence)
template<class _Ty1,
class _Ty2>
template<class _Tuple1,
    class _Tuple2,
    size_t... _Indexes1,
    size_t... _Indexes2> inline
    pair<_Ty1, _Ty2>::pair(_Tuple1& _Val1,
        _Tuple2& _Val2,
        integer_sequence<size_t, _Indexes1...>,
        integer_sequence<size_t, _Indexes2...>)
    : first(_STD get<_Indexes1>(_STD move(_Val1))...),
        second(_STD get<_Indexes2>(_STD move(_Val2))...)
    {   // construct …
Run Code Online (Sandbox Code Playgroud)

c++ dictionary stdmap friend std-pair

9
推荐指数
1
解决办法
435
查看次数

使用make_pair时,Visual Studio 2012中的c2664

我挖了一个旧项目并想编译它,但收到了几个错误,其中一些是c2664:

error C2664: 'std::make_pair' : cannot convert parameter 1 from 'CUser *' to 'CUser *&&'
error C2664: 'std::make_pair' : cannot convert parameter 1 from 'unsigned long' to ' unsigned long &&'
Run Code Online (Sandbox Code Playgroud)

相关的代码部分是:

//typedef for the userdata map
typedef std::map<unsigned long, std::pair<CUser*,userstatus*>> UserDataMapType;
//...
Inc::incret CUserManager::AddUser(unsigned long ID, CUser* pUser, userstatus* pUserStatus)
{
    //...
    std::pair<UserDataMapType::iterator, bool> ret = m_mapUserData.insert(std::make_pair<unsigned long, std::pair<CUser*, userstatus*>>(ID, std::make_pair<CUser*, userstatus*>(pUser, pUserStatus)));
    //...
}
Run Code Online (Sandbox Code Playgroud)

我试图制作函数参数const,但这没有帮助.

它确实在VS2010中编译得很好.

请帮我找到导致此问题的原因以及解决方法.

visual-c++ std-pair visual-studio-2012

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

使用后增量构造带有变量的 std::pair 整数

我尝试构造整数对,其中第二个整数大于第一个整数1

1 2
2 3
3 4
Run Code Online (Sandbox Code Playgroud)

std::make_pair像这样使用两者和构造函数:

std::make_pair(n, n++);
Run Code Online (Sandbox Code Playgroud)

但是,这会导致对相反:

2 1
3 2
4 3
Run Code Online (Sandbox Code Playgroud)

如果我将后增量放在第一个参数上或(n+1)改为使用,我会得到所需的结果。

为什么会这样?

c++ function function-parameter post-increment std-pair

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