- ベストアンサー
map(stl)の引数を知りたい
C++です。 map <int, int> i; により、整数→整数のmapを作ったとします。 そのときに、引数の整数値の最小値を知りたいのですが、 簡単な方法はありますか? perlで言うところの、$ARGV[0]です。
- C・C++・C#
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>「begin()が返すmapの先頭要素から分かると思います。」 >ということは、最初のキー=i.begin()ということでしょうか? >私の環境では、コンパイルエラーになってしまいます。 i.begin()はiteratorを返します。なので: int minimum_key = i.begin()->first; inr manimum_val = i.begin()->second;
その他の回答 (1)
- Werner
- ベストアンサー率53% (395/735)
> そのときに、引数の整数値の最小値を知りたいのですが、 この「引数」とは何のことですか? mapのキー、もしくは値のことでしょうか? mapのiteratorの参照順はキーが小さな順なので 最小のキーを知りたいのなら begin()が返すmapの先頭要素から分かると思います。 > perlで言うところの、$ARGV[0]です。 perlの$ARGV[0]は1つめのコマンドライン引数なので、 C++では int main(int argc, char *argv[]) としたときの、argv[1]が対応すると思います。 しかし、これはstd::mapとは関係ないですよ?
お礼
ありがとうございます。 引数はキーのことです。 「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... ご意見よろしくお願いします。
- ベストアンサー
- C・C++・C#
- STLのmapについて
いつもお世話になっております。 今回はmapについてお聞きしたいです。 現在mapを使っていますが、mapを構造体に入れようと struct PARAM { int i; char str; map<int, int> map; }; のようにしていますが、<が不正です、のようなことを言われてうまくいきません。 構造体にmapを入れることは可能なのでしょうか? 可能ならばその方法を教えていただけると幸いです。 以上、ご教授願います。 環境は OS WindowsXP SP2 VC++6.0 です。
- ベストアンサー
- C・C++・C#
- 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箇所で処理でしないのでしょうか?
- ベストアンサー
- C・C++・C#
- コマンドプロンプトを使用してのコマンドライン引数
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; } というプログラムを実行しても何も表示されません。 どうすればコマンドライン引数を利用できますか?
- ベストアンサー
- C・C++・C#
- 引数について教えてください。
誰か教えてください。 今、このプログラム自体は引数に整数を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[]) で使えば問題なく使えるのですが、デフォルトのウィザードを使った時の使い方を知っておきたいのです。 御経験のある方、御教示お願い致します。
- ベストアンサー
- C・C++・C#
- 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>'で宣言できません。」 となってしまいます。 どのように修正したらよいでしょうか?
- ベストアンサー
- C・C++・C#
- 関数の引数の書き方。
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
- ベストアンサー
- C・C++・C#
- 引数の渡し方と受け方(argv)
メインで引数をもらい、それをパラメタチェック関数に 渡す場合、どのような形で渡せばいいですか? ※メインでargvを変数に格納しないで、 そのままargvを関数に渡す方法が分かりません。 int prm_chk(char *argv[]) { /* 処理省略 */ } int main (int argc, char *argv[]) { /* 処理省略 */ /* 以下のパラメタ(argv)の渡し方 */ if(prm_chk(*argv[]) != 0){ exit(-1); } exit(0); }
- ベストアンサー
- C・C++・C#
- 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を付けない形が出回っているのでしょうか?
- ベストアンサー
- C・C++・C#
お礼
できました。ありがとうございました。