質問するログイン新規登録

Q&A

解決済

1回答

9579閲覧

pair型を要素にとる配列の初期化の方法

cand

総合スコア65

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/02/23 10:31

編集2019/02/24 03:49

0

1

c++

1pair<int,int> P[100010]; 2for(int i=0;i<n;i++){ 3 P[i].first=i+1; 4 //省略 5 P={}; 6}

のようにPを空集合にしたいのですが、P={}と書くと、
"式は変更可能な左辺値である必要があります"
と出てくるのですが、どうしたらよいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

episteme

2019/02/23 10:45 編集

それでええやん。何が問題なん? あと P = {}; て何がしたいの?
episteme

2019/02/24 10:19 編集

「Pを空集合にしたい」とは? 要素数を0にするの? それに何の意味が? 要素数可変の配列が欲しいなら vector<pair<int,int>> じゃダメ?
cand

2019/02/24 10:29

ダメじゃないです。ありがとうございます。
episteme

2019/02/24 10:34

だとすると P[i].first=i+1; は何がしたいんです? 要素が無いなら意味ないのに。
cand

2019/02/24 10:35

すみません、いろいろ省略してます
episteme

2019/02/24 10:39

ごめん、何したいのかさっぱりわからん。要素無いのになんでfor-loop回す? 回っても0回ちゃうの?
cand

2019/02/24 10:41

すみません、いろいろ省略してますので
guest

回答1

0

ベストアンサー

C++

1#include <utility> // std::pair 2#include <numeric> // std::iota 3#include <iterator> // std::begin, std::end 4#include <iostream> 5 6// pair<int,int>::first をインクリメントするためのヘルパー 7struct seq_pair : std::pair<int,int> { 8 seq_pair& operator++() { ++first; return *this; } 9 seq_pair(int n) : std::pair<int,int>(n,0) {} 10}; 11 12int main() { 13 const int N = /* 100010 */ 10; 14 std::pair<int,int> P[N]; 15 16 // P[N] を(1,0), (2,0), ... (N,0) で埋める 17 std::iota(std::begin(P), std::end(P), seq_pair(1)); 18 19 // デキタカナ? 20 for ( auto item : P) { 21 std::cout << item.first << ',' << item.second << std::endl; 22 } 23 24} 25 26/* 実行結果 271,0 282,0 293,0 304,0 315,0 326,0 337,0 348,0 359,0 3610,0 37*/

[追記] 別解:

C++

1#include <utility> // std::pair 2#include <algorithm> // std::generate_n 3#include <iostream> 4 5int main() { 6 const int N = /* 100010 */ 10; 7 std::pair<int,int> P[N]; 8 9 // P[N] を(1,0), (2,0), ... (N,0) で埋める 10 int i = 1; 11 std::generate_n(P, N, 12 [&]() { return std::pair<int,int>(i++,0); }); 13 14 // デキタカナ? 15 for ( auto item : P) { 16 std::cout << item.first << ',' << item.second << std::endl; 17 } 18 19}

投稿2019/02/23 13:26

編集2019/02/23 13:41
episteme

総合スコア16612

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問