Questions tagged [stdtuple]

Use this tag for questions about the C++ standard library template std::tuple. It represents an ordered, heterogeneous sequence of objects. Also add the tag [c++] when using this tag.

Also see and .

403 questions
154
votes
24 answers

How can you iterate over the elements of an std::tuple?

How can I iterate over a tuple (using C++11)? I tried the following: for(int i=0; i::value; ++i) std::get(my_tuple).do_sth(); but this doesn't work: Error 1: sorry, unimplemented: cannot expand ‘Listener ...’ into a…
1521237
131
votes
6 answers

Difference between std::pair and std::tuple with only two members?

Is there a difference between an std::pair and an std::tuple with only two members? (Besides the obvious that std::pair requires two and only two members and tuple may have more or less...)
Casey
  • 10,297
  • 11
  • 59
  • 88
52
votes
3 answers

C++ std::tuple order of destruction

Is there a rule which states in which order the members of an std::tuple are destroyed? For example if Function1 returns an std::tuple, std::unique_ptr> to Function2, then can I be sure that (when the scope of…
z32a7ul
  • 3,695
  • 3
  • 21
  • 45
47
votes
2 answers

Why is std::pair faster than std::tuple

Here is the code for testing. Tuple test: using namespace std; int main(){ vector> v; for (int var = 0; var < 100000000; ++var) { v.push_back(make_tuple(var, var)); } } Pair test: #include using…
user4233758
45
votes
3 answers

More silent behaviour changes with C++20 three-way comparison

To my surprise, I ran into another snag like C++20 behaviour breaking existing code with equality operator?. Consider a simple case-insensitive key type, to be used with, e.g., std::set or std::map: // Represents case insensitive keys struct CiKey :…
sehe
  • 374,641
  • 47
  • 450
  • 633
40
votes
4 answers

What is the reason for `std::make_tuple`?

I mean why does std::make_tuple exist? I know that there are situations where the function reduces the amount of characters you have to type because you can avoid template parameters. But is it the only reason? What makes std::tuple special that the…
JojOatXGME
  • 3,023
  • 2
  • 25
  • 41
39
votes
5 answers

STL-pair-like triplet class - do I roll my own?

I want to use a triplet class, as similar as possible to std::pair. STL doesn't seem to have one. I don't want to use something too heavy, like Boost. Is there some useful FOSS non-restrictive-license triplet class I could lift from somewhere?…
einpoklum
  • 118,144
  • 57
  • 340
  • 684
32
votes
3 answers

What's the purpose of const swap() function?

While implementing a custom tuple (here), I found there is a wired swap() function that takes const parameters (cppreference): template< class... Types > constexpr void swap( const std::tuple& lhs, const…
El Mismo Sol
  • 869
  • 1
  • 6
  • 14
31
votes
2 answers

Is using `std::get` on a `std::tuple` guaranteed to be thread-safe for different values of `I`?

Let's say I have std::tuple my_tuple{x0, x1, x2}; where T0, T1 and T2 are value types (i.e. no aliasing is possible). Is it safe to access my_tuple's elements and mutate them concurrently from multiple threads using std::get, as long…
Vittorio Romeo
  • 90,666
  • 33
  • 258
  • 416
31
votes
8 answers

Using tuple in unordered_map

I want to use tuple consisting of int,char,char in my unordered_map. I am doing like this: #include #include #include #include #include using namespace std; tuple
Xara
  • 8,748
  • 16
  • 52
  • 82
29
votes
2 answers

Why does std::tuple break small-size struct calling convention optimization in C++?

C++ has a small-size struct calling convention optimization where the compiler passes a small-size struct in function parameters as efficiently as it passes a primitive type (say, via registers). For example: class MyInt { int n; public: MyInt(int…
YumeYao
  • 557
  • 4
  • 10
29
votes
5 answers

How to reduce boilerplate currently necessary for serialization

Our software is abstracting away hardware, and we have classes that represent this hardware's state and have lots of data members for all properties of that external hardware. We need to regularly update other components about that state, and for…
sbi
  • 219,715
  • 46
  • 258
  • 445
27
votes
2 answers

What's the best way to return a tuple from function in C++11?

I want to return some values from a function and I want to pack it in a tuple. So I have two possibilities for function declaration: std::tuple f() { ... return std::make_tuple(false, "home", 0); } and std::tuple
Gian Lorenzo Meocci
  • 1,136
  • 2
  • 14
  • 23
27
votes
5 answers

Removing the first type of a std::tuple

This seems to be a very simple question: How does one remove the first (the n-th) type in a std::tuple? Example: typedef std::tuple tuple1; typedef std::tuple tuple2; The operation described above would transform…
cschwan
  • 3,283
  • 3
  • 22
  • 32
26
votes
3 answers

Uniform initialization by tuple

Today, I arrived at a situation, where I have a vector of tuples, where the tuples might contain several entries. Now I wanted to convert my vector of tuples to a vector of objects, such that the entries of the tuples will exactly match the uniform…
Aleph0
  • 5,816
  • 4
  • 29
  • 80
1
2 3
26 27