PDA

View Full Version : چرا ترتیب داده ها در MAP عوض میشه ؟؟؟



Azar.099
پنج شنبه 10 دی 1394, 21:55 عصر
سلام
دوستان توی این برنامه من وقتی داده ها را میدم و داخل MAP ذخیره میکنم و بعد میخوام ازشون استفاده کنم ترتییشون عوض میشه برای همین برنامه ارور میده
مشکل چیه ؟

سوال میاد به شما اول یه n می ده و بعدش n تا اسم به شما می ده
بعدش هر بار(برای هر کس یه بار) یه اسم به ما می ده و دوتا عدد A,B
که یعنی فرد با این اسم A واحد پول رو بین B نفر B خط بعدی تقسیم می کنه
نکته1.اول کار همه صفر واحد پول دارن!
نکته2.اگر مقدار پولی که می خواد تقسیم کنه بر اون تعداده بخشپذیر نباشه مقدار باقیمانده تو جیب خود پخش کننده می مونه
حالا شما باید توی خروجی اول اسم هر کس و مقدار پولی که الآن تو جیبشه رو چاپ کنین
اسم ها هم باید به همون ترتیبی باشن که ورودی به شما داده

#include<iostream>#include<map>
#include<string>


using namespace std;


int main()
{ int n;
map<string,int> mymap;
map<string,int>::iterator it;


cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin>> s;
mymap.insert(make_pair(s,0));
}
string s;
int a, b,j;


for (int i = 0; i < n; i++) {
cin >> s >> a >> b;
if(b!=0)
mymap[s] += (a%b);
else
{
mymap[s] += a;
continue;
}
it = mymap.find(s);
it++;
j = b;
while (j!=0)
{
it->second += a / b;
it++;
j--;
}
}

it = mymap.begin();
while (it != mymap.end())
{
cout << it->first << "=" << it->second << " ";
++it;
}


return 0;
}

Poores
جمعه 11 دی 1394, 00:41 صبح
اول اینکه کدتون رو قرار بدین که ما بتونیم بگیم اشکالش کجاست
دوم یکم گنگ توضیح دادن سوالو.

سوالش شبیه سوالات ACM هست اگه میشه متن اصلی سوالو (حتی اگه انگلیسیه) بزارین

و اما سوم!

MAP ساختمان داده ای هست که توش ترتیب وجود نداره! یعنی مثل آرایه ، vector ، set ، لیست پیوندی و ... نیست بلکه در مپ همه چیز از طریق کلید قابل دسترسی هست.
برای مثال :

map <string,int> a;
a["sajjad] = 1;

cout << a["sajjad"];



مقدار 1 چاپ خواهد شد . اگر هم همچین کلیدی ساخته نشده باشه ، مقدارش پیشفرض 0 هست ، یعنی :

map<float,int> b;
b[1.5] = 1;

cout << b[1.55];


خروجی 0 خواهد بود.

Azar.099
جمعه 11 دی 1394, 18:57 عصر
اول اینکه کدتون رو قرار بدین که ما بتونیم بگیم اشکالش کجاست
دوم یکم گنگ توضیح دادن سوالو.

سوالش شبیه سوالات ACM هست اگه میشه متن اصلی سوالو (حتی اگه انگلیسیه) بزارین

و اما سوم!

MAP ساختمان داده ای هست که توش ترتیب وجود نداره! یعنی مثل آرایه ، vector ، set ، لیست پیوندی و ... نیست بلکه در مپ همه چیز از طریق کلید قابل دسترسی هست.
برای مثال :

map <string,int> a;
a["sajjad] = 1;

cout << a["sajjad"];



مقدار 1 چاپ خواهد شد . اگر هم همچین کلیدی ساخته نشده باشه ، مقدارش پیشفرض 0 هست ، یعنی :

map<float,int> b;
b[1.5] = 1;

cout << b[1.55];


خروجی 0 خواهد بود.

کد را گذاشتم
سوال همینه که فرستادم
خب اخه توی سوال ترتیب مهمه .
به نظرتون از چی استفاده بشه بهتره ؟
و اینکه اینو میتونم چکار کنم ؟

rahnema1
جمعه 11 دی 1394, 22:23 عصر
سلام
map از یک ساختار درختی تشکیل شده و هنگام پیمایش، محتویات خود را به صورت مرتب شده نمایش میده
می تونید کلمات را علاوه بر map ، داخل یک vector هم ذخیره کنید تا ترتیبشون حفظ بشه
همچنین می تونید به جای map از unordered_map استفاده کنید که سرعتش معمولا بیشتره یعنی از unordered_map استفاده بشه ضمن اینکه کلمات در داخل وکتور باشند