1. 程式人生 > >CS106B Section Solutions #3

CS106B Section Solutions #3

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類中中應該會有具體操作,學到後面應該會學到。

Problem 4: Cannonballs