CS106B Section Solutions #3
阿新 • • 發佈:2018-12-15
Problem 1: Set Callbacks
a)
int CompareEntry(entryT one, entryT two)
{
if(one.lastName < two.lastName)
return -1;
else if(one.lastName > two.lastName)
return 1;
else if(one.firstName < two.firstName)
return -1;
else if(one.firstName > two.firstName)
return 1;
else
return 0;
}
函式宣告為:
Set<entryT> addresses(CompareEntry);
分析:這是一個set類的宣告函式,set類為addresses, 功能是輸入2個數據,比較,選擇是否加入set中,然後返回set類的資料。
b)同樣的問題,還是寫setcallback函式
int CompareStringCaseInsensitive(string one, string two) { string lowerOne = ConvertToLowerCase(one); string lowerTwo = ConvertToLowerCase(two); if(lowerOne < lowerTwo) return -1; else if(lowerOne > lowerTwo) return 1; else return 0; }
函式宣告:
Set<string> caseInsensitiveSet(CompareStringCaseInsensitive);
大同小異
Problem 2: Maps
map類的key是string型的,通過把使用者定義的資料改寫成string類解決該問題。
Map<string> nameMap; for(int cityIndex = 0; cityIndex < cities.size();cityIndex++) { cityT currCity = cities[cityIndex];//從vector中取出的資料 string key = IntegerToString(currCity.coordinates.x) + "-" + IntegerToString(currCity.coordinates.y); nameMap.add(key, currCity.name); }
Problem 3: Cartesian Products
Set<pairT> CartesianProduct(Set<string> & one, Set<string> & two){
Set<pairT> set(PairCmpFn);//PairCmpFn為比較函式
pairT temp;
Set<string>::Iterator oneIt = one.iterator();//定義one的迭代器
Set<string>::Iterator twoIt = two.iterator();//定義two的迭代器
while(oneIt.hasNext()){
temp.first = oneIt.next();
while(twoIt.hasNext()){
temp.second = twoTt.next();
set.add (temp);//將整合的set加入set中
}
}
return set;
}
Set<pairT> set(PairCmpFn);//PairCmpFn為比較函式
這一步,估計是Set類定義的,用於加入不同的型別時進行的比較操作,problem1中有比較部分的編寫,至於整個函式在set類中中應該會有具體操作,學到後面應該會學到。