• ベストアンサー

map(stl)の引数を知りたい

C++です。 map <int, int> i; により、整数→整数のmapを作ったとします。 そのときに、引数の整数値の最小値を知りたいのですが、 簡単な方法はありますか? perlで言うところの、$ARGV[0]です。

noname#108554
noname#108554

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>「begin()が返すmapの先頭要素から分かると思います。」 >ということは、最初のキー=i.begin()ということでしょうか? >私の環境では、コンパイルエラーになってしまいます。 i.begin()はiteratorを返します。なので: int minimum_key = i.begin()->first; inr manimum_val = i.begin()->second;

noname#108554
質問者

お礼

できました。ありがとうございました。

その他の回答 (1)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

> そのときに、引数の整数値の最小値を知りたいのですが、 この「引数」とは何のことですか? mapのキー、もしくは値のことでしょうか? mapのiteratorの参照順はキーが小さな順なので 最小のキーを知りたいのなら begin()が返すmapの先頭要素から分かると思います。 > perlで言うところの、$ARGV[0]です。 perlの$ARGV[0]は1つめのコマンドライン引数なので、 C++では int main(int argc, char *argv[]) としたときの、argv[1]が対応すると思います。 しかし、これはstd::mapとは関係ないですよ?

noname#108554
質問者

お礼

ありがとうございます。 引数はキーのことです。 「begin()が返すmapの先頭要素から分かると思います。」 ということは、最初のキー=i.begin()ということでしょうか? 私の環境では、コンパイルエラーになってしまいます。 perlについては間違えました。すみません。

関連するQ&A

  • 【C】引数の変換をする場合どちらの方法を使うべきでしょうか?

    int main(int argc, char* argv[]) { int i; /* argv[1]をintになおして格納用 */ 処理 } という感じでメインを作ると思いますが 引数のargv[0]はファイルの絶対パス argv[1]には"必ず"数字(整数)が入っていると仮定して argv[1]をint型に変換する場合 (1) sscanf(argv[1], "%d", &i); とするか (2) stdlib.hをインクルードして i = atoi(argv[1]); とするかの二通りをとりあえず思いついたのですが どちらもintに変換された値が入るわけですが C言語になれておられる方なら普通どちらをつかいますか? (1)or(2) 又はそれ以外の方法、どっちでも良し、場合によるetc... ご意見よろしくお願いします。

  • STLのmapについて

    いつもお世話になっております。 今回はmapについてお聞きしたいです。 現在mapを使っていますが、mapを構造体に入れようと struct PARAM {   int  i;   char  str;   map<int, int>  map; }; のようにしていますが、<が不正です、のようなことを言われてうまくいきません。 構造体にmapを入れることは可能なのでしょうか? 可能ならばその方法を教えていただけると幸いです。 以上、ご教授願います。 環境は OS WindowsXP SP2 VC++6.0 です。

  • STL MAPのキー

    3種類のキーを持ったデータの検索をしたいのですが、 mapで実現する場合、どんな方法があるのでしょうか キー int A、キー int B、キー string C、VOL=クラスX 検索はA,B,Cでそれぞれ行うとした場合、以下のようなmapのtypedefを3種類設定することになるのでしょうか? map<int, クラスX> aa; map<int, クラスX> bb; map<string, クラスX> cc; これですと削除がする場合には3箇所mapを修正するひつようがありますので1箇所で処理でしないのでしょうか?

  • コマンドプロンプトを使用してのコマンドライン引数

    winXPのコマンドプロンプトを利用して 参考書「独習C」を使い、C言語の学習をしています。 その本の7.4の項目~main()の引数~で main(int argc,char *avgv[])を利用すると コマンドラインから引数をとることができるとありますが 私の学習環境ではうまくいきません。 具体的には #include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1; i<argc; i++) printf("%s ", argv[i]); return 0; } というプログラムを実行しても何も表示されません。 どうすればコマンドライン引数を利用できますか?

  • 引数について教えてください。

    誰か教えてください。 今、このプログラム自体は引数に整数を2個入れたら加算されるように出来ていますがこれを何個入れても足せるようにしたいのですが、どのように変更したらいいのか分かりません。 すみませんが、お願いします。 public class Sample20 { public static void main(String[] argv) { if(argv.length != 1) { if(argv.length>=2) { int a,b; try { if(argv[0].indexOf(".") == -1 && argv[1].indexOf(".") == -1) { try { a=Integer.parseInt(argv[0].replaceAll("\\+" , "")); b=Integer.parseInt(argv[1].replaceAll("\\+" , "")); System.out.println(a+b); } catch(NumberFormatException e) { System.out.println("最大9桁までしか実行できません"); } } else { System.out.println("小数点は整数ではないので実行できません"); } } catch(Exception e) { System.out.println ("エラー:2個整数のみ入力して下さい"); } } else { System.out.println("エラー:何も入力されていません"); } } else { System.out.println("エラー:引数が一つしか入力されていません"); } } }

    • ベストアンサー
    • Java
  • _TCHAR*での引数の読み込み

    VC++2010での、通常の #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } のウィザードを使って、arvg[1]やargv[2]に引数を与えて、本体内で通常のCで使う printf("%s\n", argv[1]); や fopen(argv[1], "r"); を使いたいのですが、引数の型が_TCHAR*になっているため文字がそのまま使えません。 int main(int argc, char *argv[]) で使えば問題なく使えるのですが、デフォルトのウィザードを使った時の使い方を知っておきたいのです。 御経験のある方、御教示お願い致します。

  • mapの引数としてstring型を用いたい

    言語はVisual C++ 2005、OSはXPを用いています。 <map>、<string>、<iostream>をincludeした上で、 Formを用意しボタンをクリックすると 以下のプログラムが動くようにすると、 これはうまくいきます。 (メッセージボックスに187と表示される。) map <int,int> mapTest; mapTest[10]=187; MessageBox::Show((mapTest[10]).ToString()); ところが、引数をString型に変えて、 以下のようにすると、 map <String^,int> mapTest; mapTest["qwe"]=187; MessageBox::Show((mapTest["qwe"]).ToString()); コンパイルエラー「マネージ'first'をアンマネージ'std::pair<_Ty1,_Ty2>'で宣言できません。」 となってしまいます。 どのように修正したらよいでしょうか?

  • 関数の引数の書き方。

    AとBのどちらの書き方でもよいのですか? 私が読んだ本(やさしいC)には、 Aパターンのみだったような? Aパターン ------------------ void main(int argc,char *argv[]) { int i; ・・・・ } Bパターン ------------------ void main(argc, argv) int argc; char *argv[]; { int i; ・・・・ } http://ash.jp/db/ora_c.htm

  • 引数の渡し方と受け方(argv)

    メインで引数をもらい、それをパラメタチェック関数に 渡す場合、どのような形で渡せばいいですか? ※メインでargvを変数に格納しないで、 そのままargvを関数に渡す方法が分かりません。 int prm_chk(char *argv[]) { /* 処理省略 */ } int main (int argc, char *argv[]) { /* 処理省略 */ /* 以下のパラメタ(argv)の渡し方 */ if(prm_chk(*argv[]) != 0){ exit(-1); } exit(0); }

  • main の引数には const 付けた方が

    C言語での質問です。 引数を取るような main 関数は int main( int argc, char *argv[]){~} とされていますが、argvの指す文字列を変更する、というのはいくら何でもまずいので、 int main( int argc, const char *argv[]){~} あるいは int main( int argc, const char const * const * argv){~} の方がいいのではないでしょうか? 何故、constを付けない形が出回っているのでしょうか?

専門家に質問してみよう