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) 我试图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) 如果我将一对移动到地图中,但由于密钥已经存在而插入失败,我可以安全地使用该对吗?
//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)
这是否已在标准中记录?
有没有人知道是否有一个事实上的标准(即TR1或Boost)C++函数对象来访问std :: pair的元素?在过去24小时内,我曾两次希望我有类似keysPerl哈希函数的功能.例如,在std :: map对象上运行std :: transform并将所有键(或值)转储到另一个容器会很不错.我当然可以编写这样一个函数对象,但我更愿意重用那些有很多眼球的东西.
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)
我不想要成对中的任何值,我只想拥有一个空向量的向量.我该怎么做?
我想找到std::lower_bound的一个的std::vector的std::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) 我有一个小程序,我想执行测试
#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) 我的工作,它使用应一个结构库不具有由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)
我想阻止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) 我挖了一个旧项目并想编译它,但收到了几个错误,其中一些是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中编译得很好.
请帮我找到导致此问题的原因以及解决方法.
我尝试构造整数对,其中第二个整数大于第一个整数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)改为使用,我会得到所需的结果。
为什么会这样?